Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

이것저것

[2023 모각코] 5회차 (2024.01.22.) 본문

2023 동계 모각코

[2023 모각코] 5회차 (2024.01.22.)

수빈최 2024. 1. 22. 17:41

학습 목표
<레트로의 유니티 게임프로그래밍 에센스> 7장을 통한 유니티 학습
 

 

학습 내용
: 사방에서 날아오는 탄알을 피하는 탄막 슈팅게임 만들기 2 (탄알, 탄알 생성기 만들기)
 

 

탄알을 만들어주기 위해 Sphere을 생성하고 크기를 (0.5, 0.5, 0.5)로 줄임

Bullet Color라는 이름의 Material을 생성하고 Albedo를 빨간색인 (255, 0, 0)으로 설정하여 적용

 

 

 

탄알이 플레이어와 상호작용 할 수 있도록 Rigidbody 컴포넌트를 추가하되,

Rigidbody가 추가되면 중력의 영향을 받아 아래로 떨어지게 되므로 Use Gravity를 해제함

 

해당 탄알이 다른 탄알에 충돌했을 때 충돌 자체는 감지하도록하고

튕겨나가지 않고 그대로 통과하도록 만들기 위해 Sphere Collider의 Is Trigger을 체크함

트리거 콜라이더는 물리적인 표면이 없으나 충돌 자체는 감지하기 때문에

충돌이 감지되었을 때 어떤 기능을 실행하는 방아쇠로 많이 사용됨

 

 

 

프리팹은 언제든지 재사용할 수 있는 미리 만들어진 게임 오브젝트 에셋으로,

비슷한 게임 오브젝트를 여러 개 만들 때 매번 다시 설정하는 번거로움을 줄여줌

 

탄알을 언제든지 재사용할 수 있도록 프리팹으로 만들어둠

 

 

 

해당 스크립트가 활성화될 때

Bullet 게임 오브젝트의 Rigidbody 컴포넌트를 bulletRigidbody에 할당하고

bulletRigidbody.velocity로 탄알의 속도를 변경함

여기서 transform.forward는 현재 게임 오브젝트의 z축 방향을 나타내는 Vector3 타입 변수로,

자신의 트랜스폼 컴포넌트로 바로 접근하는 변수임

 

- OnTriggerEnter(Collider other) :  충돌한 순간

- OnTriggerStay(Collider other) : 충돌하는 동안

- OnTriggerExit(Collider other) : 충돌했다가 분리되는 순간

 

해당 스크립트에서는 탄알의 충돌처리를 위해 OnTriggerEnter() 메소드를 추가함

other을 통해 충돌한 상대 게임 오브젝트의 태그가 플레이어인지 검사하고

플레이어인 경우 플레이어의 PlayerController 컴포넌트를 가져와

4회차에서 PlayerController 스크립트에서 정의했던 Die() 메소드를 실행

 

 

 

탄알 생성기를 만들기 위해 Cylinder 게임 오브젝트를 생성해 위치를 지정하고

Bullet Color Material을 탄알 생성기에도 적용하여 색상을 설정함

 

 

 

필요한 변수들을 정의하고 탄알 생성 간격을 spawnRateMin, spawnRateMax사이에서 랜덤 설정함

탄알 생성기가 플레이어를 조준 대상으로 해야하므로 FindObjectOfType() 메소드를 사용

 

update() 메소드를 통해 탄알을 생성 간격에 따라 자동으로 생성하게 하기 위해

최근 생성 시점에서 누적된 시간과 생성 주기를 비교함

Instantiate() 메소드를 사용하여 탄알 프리팹 원본을 입력으로 주고

탄알 생성기의 위치에서 바라보고 있는 방향을 고려해 복제본을 계속 생성하도록 함

 

 

 

위에서 작성한 스크립트를 BulletSpawner에 적용한 후, 탄알 생성기를 사방에 위치시킴