입력 관리자를 활용하여 스폰 및 폭발
문제 1 - 마우스 버튼 프로세서 설정
프로젝트 창의 스크립트 폴더에서 마우스 버튼 프로세서 스크립트를 계층 구조 창의 메인 카메라로 드래그합니다. 계층구조 창에서 메인 카메라를 마우스 왼쪽 버튼으로 클릭하여 선택합니다.
프로젝트 창에서 프리팹 폴더를 확장하고 폭발 프리팹을 인스펙터의 마우스 버튼 프로세서(스크립트) 컴포넌트에 있는 프리팹 폭발 필드에 끌어다 놓습니다. 테디베어 프리팹을 인스펙터의 마우스 버튼 프로세서(스크립트) 구성 요소에 있는 테디베어 프리팹 필드에 드래그합니다.

문제 2 - 마우스 왼쪽 버튼에 테디 베어 스폰
입력 관리자를 열고 필요한 경우 축 영역을 확장한 다음 크기 옆의 값에 1을 더합니다. 아래쪽 입력 축(방금 추가한 축)을 확장하고 이름을 SpawnTeddyBear로 변경합니다. 포지티브 버튼을 마우스 0으로 변경하고 Alt 포지티브 버튼을 삭제합니다.

Visual Studio에서 MouseButtonProcessor 스크립트를 엽니다.
Update 메서드에 코드를 추가하여 SpawnTeddyBear 축에 입력이 있을 때 마우스 위치에서 테디베어 프리팹을 인스턴스화합니다. 마우스 버튼 처리 재검토 강의에서는 축에 입력된 첫 번째 프레임에만 반응하는 방법에 대해 설명했습니다. 여기서는 플레이어가 마우스 왼쪽 버튼을 누를 때 테디베어를 하나만 스폰하도록 하기 위해 이 접근 방식을 사용해야 합니다. 마우스 위치 처리 강의에서는 월드 좌표에서 마우스 위치를 결정하는 방법을 보여줍니다.
코드를 테스트하여 제대로 작동하는지 확인하고 필요에 따라 디버그하세요.
void Update()
{
// spawn teddy bear as appropriate
if (Input.GetAxis("SpawnTeddyBear") > 0)
{
if (!spawnInputOnPreviousFrame)
{
spawnInputOnPreviousFrame = true;
SpawnTeddy();
}
}
else
{
spawnInputOnPreviousFrame = false;
}
// explode teddy bear as appropriate
}
void SpawnTeddy()
{
// 위치 설정
Vector3 position = Input.mousePosition;
position.z = -Camera.main.transform.position.z;
Vector3 worldPosition = Camera.main.ScreenToWorldPoint(position);
// 오브젝트 인스턴스화
GameObject teddyBear = Instantiate<GameObject>(
prefabTeddyBear, worldPosition, Quaternion.identity);
}
}
- else문의 위치 주의하기
- 같은 위치에 오브젝트를 여러 개 생성하면 스프라이트가 생성되지 않을 수 있다
문제 3 - 마우스 오른쪽 버튼으로 테디베어 폭발하기
입력 관리자를 열고 필요한 경우 축 영역을 확장한 다음 크기 옆의 값에 1을 더합니다. 아래쪽 입력 축(방금 추가한 축)을 확장하고 이름을 ExplodeTeddyBear로 변경합니다. 포지티브 버튼을 마우스 1로 변경하고 Alt 포지티브 버튼을 삭제합니다.

Visual Studio에서 MouseButtonProcessor 스크립트를 엽니다.
Update 메서드에 코드를 추가하여 게임 내 테디베어 중 하나를 폭발시킵니다. 마우스 버튼 처리 다시 보기 강의에서 축에 입력된 첫 번째 프레임에만 반응하는 방법에 대해 설명했으므로 여기서는 이 접근 방식을 사용하여 플레이어가 마우스 오른쪽 버튼을 누를 때 테디베어 하나만 폭발하도록 해야 합니다. 이미 테디베어 프리팹에 테디베어 태그를 지정했으므로 GameObject FindWithTag 메서드를 사용하여 게임에서 테디베어 중 하나를 가져올 수 있습니다. 이 메서드는 게임 내에 테디베어가 없는 경우 null을 반환할 수 있으므로 테디베어를 폭파하기 전에 null을 확인해야 합니다. 테디베어가 null이 아니라면 테디베어의 위치에 폭발 프리팹을 인스턴스화하고 테디베어를 파괴합니다.
// explode teddy bear as appropriate
if (Input.GetAxis("DestroyTeddyBear") > 0)
{
if (!explodeInputOnPreviousFrame)
{
explodeInputOnPreviousFrame = true;
// 태그로 오브젝트 찾기
GameObject teddy = GameObject.FindWithTag("TeddyBear");
// 남은 오브젝트가 있을 때만 폭발 처리
if (teddy != null)
{
GameObject explosion = Instantiate<GameObject>(
prefabExplosion, teddy.transform.position, Quaternion.identity);
Destroy(teddy);
}
}
}
else
{
explodeInputOnPreviousFrame = false;
}
- 플래그 설정에 주의하기
인스턴스화를 하는 코드는 약간씩 차이를 줄 수 있다
GameObject.Instantiate(prefabTeddyBear, mousePosition, Quaternion.identity);
GameObject explosion = Instantiate<GameObject>(
prefabExplosion, teddy.transform.position, Quaternion.identity);
- 실행결과는 똑같지만 세밀한 설정을 위해서 작성 방법을 다르게 할 수 있다