코딩 공부/Unity C#

리스트를 사용하여 테디가 물건을 모을 수 있도록 하기

recordmastd 2024. 7. 7. 17:55

오른쪽 마우스 버튼으로 마우스 위치에 물건 오브젝트를 생성,

왼쪽 마우스 버튼을 누르면 오래된 것부터 테디가 오브젝트를 수집하는 프로그램

(테디가 직접 움직여서 물체의 위치까지 이동하영 수집하는 방식)

 

 

teddyBear 스크립트

TeddyBear 스크립트

- tedTheCollertor 스크립트에 대한 레퍼런스를 미리 저장한다(Main Camera에 부착도니 스크립트)

그러면, 게임이 진행되는 동안 해당 스크립트를 사용할 수 있다.

 

- Start에서 테디의 위치와 아까 저장해뒀던 변수를 정의해준다.

- Camera.main.GetComponent<T>()으로 메인카메라에 있는 스크립트를 가져온다.

- 맨 처음에만(Start메서드)이 과정을 진행하는 편이 효율적이다.

- OnMouseDown()은 사용자가 마우스 왼쪽 버튼을 눌렀을 때 실행되는 메서드이다.

- 콜렉팅을 하지 않는 상태에서만 콜렉팅 명령(왼쪽 마우스 클릭)을 받기 위해 if문을 설정한다.

- OnTriggerStay2D()는 특정 게임 오브젝트가 트리거 콜라이더 내부에 머무르고 있을 때 매 프레임마다 호출되는 메서드

- 물건을 순서대로 픽업하기 위해 물건 오브젝트가 타겟 픽업인지 if문으로 확인한다

- 테디가 물건을 픽업하면 잠시 멈추게 하기 위해 속도를 직접 0으로 설정한다

- 올바른 타겟이면 물건을 픽업한 후 다른 오브젝트를 픽업하러 간다.

TeddyBear 오브젝트에 부착된 Box Collider

- 인스펙터 창에서 Is Trigger 항목의 체크박스에 체크를 하면 트리거 설정이 완료된다.

- 트리거 설정이 되면 일반 물리 충돌기가 아닌 트리거 충돌기가 된다.

(= 일반적인 충돌 해결을 하는 것이 아닌 OnTrigger 메서드를 호출하는 것으로만 충돌 해결을 한다는 뜻)

- targetPickup 프로퍼티를 가져오고 저장한다. OnTrigger메서드에서도 확인할 수 있다.

- targetPickup의 위치를 가져와서 현재 테디 오브젝트 위치 값을 뺀다.

- Normalize()로 위치를 유닛벡터로 변환한다


tedTheCollector 스크립트

- 특정 테디의 행동을 조절하는 것이 아닌 게임 수준의 작업을 진행하는 스크립트(like game manager)

- 유니티에서 설정한 프리팹 저장

프로퍼티

- pickips.count(물건 오브젝트)의 수가 1개 이상이면 가장 처음에 생성된(인덱스 번호 0) 오브젝트를 반환한다

- 물건 오브젝트가 아예 없으면 null을 반환한다

 

- 사용자가 오른쪽 마우스 버튼을 누르면 메서드를 호출한다

- 마우스의 위치를 계산한 후 오브젝트를 마우스 위치에 생성, pickup 리스트에 추가한다

- 리스트에서 해당 물건 오브젝트 삭제

- 주워진 해당 오브젝트 Destroy