유니티

유니티 03. 게임오브젝트 생성 & 삭제 함수 및 Instantiate() 활용

채채_._. 2024. 4. 17. 07:30

원본 오브젝트

- 게임에서 오브젝트를 복제 생성하기 위해 필요.

- 게임 내부에 있는 오브젝트를 사용하지 않음.

  예) 플레이어에 의해 원본으로 사용되던 것이 죽게 되어 더 이상 복제를 할 수 없게 됨.

- 프로젝트 뷰에 파일로 저장해둔 프리팹(Prefeb)을 이용.

 

프리팹(Prefeb)

- 안전하게 보관되어 있는 파일 형태.

- 게임에 존재하는 게임 오브젝트 project view에 파일로 저장해 둔 것.

 

생성

1. 원하는 형태로 게임오브젝트를 꾸며줌.

2. Hierarchy View의 게임오브젝트를 Project View로 드래그&드롭함.

3. Hierarchy View에 있는 게임오브젝트를 삭제하여 project에 있는 오브젝트를 Hierarchy로 이동.

 

Instantiate(원본오브젝트 정보)

- original 게임오브젝트를 복제해서 생성.

- 복제되는 오브젝트의 모든 컴포넌트 정보가 원본과 동일.

- 새로운 빈 오브젝트를 만들어 해당 코드 script 적용.

- 윗 사진처럼 어떤 프리팹을 등록할 지 보여줌.

- square 게임오브젝트를 등록한 후 실행하면 프리팹을 복제해서 만든 스퀘어라고 하는 오브젝트 생성

- 코드에서 "Instantiate(boxPrefab);" 의 수에 따라 박스 생성.

 

Instantiate(GameObject original, Vector3 position, Quaternion rotation);

: original 프리팹을 복제해서 생성하고, 생성된 복제본의 위치를 position으로, 회전을 rotation으로 설정.

 

쿼터니온(Quaternion) & 오일러(Euler)

  • 쿼터니온(Quaternion) : 3차원의 3개 각도를 표현하기 위해 사용하는 3x3 크기의 행렬.
  • 일러(Euler) : 사원수로 3개의 백터 요소와 하나의 스칼라 요소로 구성.

- 해당 코드를 반영하면 게임 오브젝트는 회전함.

 

GameObject clone = Instantiate(GameObject original, Vector3 position, Quaternion rotation);

: original 프리팹을 복제해서 생성하고 생성된 복제 오브젝트의 정보를 clone에 저장. 현재 코드에서 clone과 방금 생성된 박스 오브젝트는 동일.

- 코드를 통해 위치, 크기, 색 모두 변형 가능한 것을 확인할 수 있음.

 

삭제

Destroy(Component);

- 오브젝트 삭제 함수로 매개변수에 입력되어 있는 오브젝트 및 컴포넌트를 삭제함.

- Destroy 게임오브젝트에 Player object에 Player 오브젝트 적용.

- 실행하면 player 컴포넌트가 게임에서 사라지는 것을 확인할 수 있음.

 

Destroy(GameObject);

- 실행하면 게임 오브젝트 자체가 사라짐

 

Destroy(GameObject);

- 게임오브젝트를 time 시간만큼 흐른 뒤에 삭제됨.

 

조건문 작성

- 조건문을 작성하여 오브젝트 x 또는 y 범위 벗어나면 삭제가 되도록 설정 가능.

 

장애물과 충돌하면 오브젝트 삭제

- 장애물 벽을 생성.

- 총알을 쏴서 부딪히면 설정한 색상 red로 벽 색깔이 변함.

 

Instantiate() 활용

 

반복문을 이용한 오브젝트 생성

- 원하는 갯수만큼 오브젝트를 복제해서 생성하는 예제

- 반복의 사용되는 변수 i를 이용해 오브젝트에 x 위치와 회전 증가하도록 설정.

- 로테이션 회전 값이 z 축으로 10씩 회전하는 것 또한 볼 수 있음.

중첩 이중 반복문 사용한 코드

- 4x4 격자

  • 외부 반복문 : 격자의 y축
  • 내부 반복문 : 격자의 x축