게임 내에서 코드로 오브젝트를 복제하기 위해서는 원본이 되는 게임오브젝트가 필요하다.
이 원본이 되는 오브젝트는 게임 내에 있는 오브젝트를 사용하는 것이 아닌 Project View에 파일로 저장해 둔 프리팹을 이용한다.
01 프리팹(Prefab) 생성
프리팹(Prefab)이란?
게임(Hierarchy View)에 존재하는 게임오브젝트를 Project View에 파일로 저장해 둔 것
프리팹을 생성하는 방법
1. 게임오브젝트를 생성한다.

2. 원본으로 사용하게 될 오브젝트의 용도에 맞게 꾸며준다.

3. Hierarchy View의 게임오브젝트를 Project View로 드래그 앤 드롭을 한다.

드래그 앤 드롭을 하면 파란색 큐브 모양의 Prefab Asset이 생성된다.
4. Hierarchy View에 있는 게임오브젝트를 삭제한다.

5. Project View에 있는 Prefab을 Hierarchy View에 드래그하면 복제된다.

02 Instantiate(원본 오브젝트 정보)

Instantiate는 매개변수에 입력된 오브젝트를 완전히 동일하게 복제해서 생성하는 함수이다.
위의 코드와 같이 boxPrefab라는 변수에 등록된 게임오브젝트를 복제해서 생성하게 된다.

유니티 에디터에서 빈 오브젝트를 하나 생성하고 ObjectSpawner 스크립트를 적용한다.

앞에서 생성한 Box를 Box Prefab에 등록한다.

게임을 실행하면 프리팹을 복제해서 만든 Box라는 오브젝트가 하나 생성된 것을 확인할 수 있다.
03 Instantiate(원본, 위치, 회전)

Instantiate는 세 개의 매개변수를 써서 코드와 같이 위치, 회전값을 함께 설정할 수 있다.
위치만 따로 설정할 수는 없고 세 개의 변수 모두 사용해야 한다.
두 개의 오브젝트가 생성되도록 코드를 작성했다.

결과를 확인해 보면, 위치가 다른 오브젝트 2개가 생성된 것을 확인할 수 있다.
04 쿼터니온(Quaternion)과 오일러(Euler)
회전 정도를 나타내고 연산하는 방식에는 쿼터니온과 오일러 두 가지 방식이 있다.
쿼터니온(Quaternion)
사원수로 3개의 벡터 요소와 하나의 스칼라 요소로 구성
오일러(Euler)
우리가 흔히 알고 있는 360 각도 표현 방식
현재 Instantiate에서 세 번째 매개변수에 사용되는 회전 정보는 쿼터니온으로 나타내기 때문에 우리가 특정 각도를 입력하는 것이 어렵다.
따라서 유니티에서는 Quaternion.Euler() 함수를 이용해서 각도 값을 표현하게 되면, 쿼터니온 값으로 변형시켜 주는 함수를 제공하고 있다.


코드를 실행하면 위와 같이 오브젝트가 회전되어서 표현되는 것을 확인할 수 있다.
05 GameObject go = Instantiate();
방금 생성한 오브젝트의 정보를 가지고 오브젝트 제어하기
GameObject clone = Instantiate(GameObject original, Vector3 position, Quaternion rotation);
original 게임오브젝트(프리팹)를 복제해서 생성하고, 생성된 복제 오브젝트의 정보를 clone에 저장
현재 코드에서 clone과 방금 생성된 박스 오브젝트는 동일하다.
(clone의 정보가 바뀌면 Hierarchy View에 생성된 오브젝트의 정보가 바뀐다.)


'PBL > Unity' 카테고리의 다른 글
| 유니티 2D 기초 - 게임오브젝트 삭제 함수 (0) | 2024.04.14 |
|---|---|
| 유니티 2D 기초 - Instantiate() 활용 예제 (0) | 2024.04.14 |
| 유니티 2D 기초 - 게임오브젝트 물리와 충돌 (0) | 2024.04.09 |
| 유니티 2D 기초 - 게임오브젝트 이동 (0) | 2024.04.08 |
| 유니티 기초 - 유니티 이벤트 함수 (0) | 2024.04.08 |