이 글은 "따라하면서 배우는 고박사의 유니티 기초" 강의를 정리한 글이다.
Prefab 개요
게임 내에서 코드를 이용해 오브젝트를 복제 생성하기 위해서는 원본이 되는 오브젝트가 필요하다
원본이 되는 오브젝트는 게임 내의 오브젝트가 아닌 프로젝트 영역의 파일로 저장해둔 prefab을 사용한다. 이는 게임 내에 있는 오브젝트를 사용하는 경우 예를 들어 플레이어에 의해 원본으로 사용되는 적을 죽이게 되면 더 이상 복제할 수 없게 되기 때문에 파일형태의 prefab을 사용하게 된다.
Prefab 생성
Prefab을 생성하는 방법은 아래 3단계로 진행된다.
1. 원하는 형태의 게임 오브젝트를 생성한다
2. Hierarchy View의 게임 오브젝트를 Project view로 드래그 & 드롭
3. Hierarchy View에 있는 게임 오브젝트를 삭제한다.
이후에 프로젝트 뷰에 있는 prefab을 Hierarchy View에 복제하는 것을 코드를 통해 구현해보겠다.
Instantiate(원본 게임오브젝트)
Instantiate는 매개변수에 입력된 원본 게임 오브젝트를 동일하게 복제해서 생성하는 함수이다. 다음과 같이 코드를 작성하고, 새로 생성한 빈 오브젝트에 컴포넌트로 스크립트를 추가한다.
그러면 Box Prefab이라고 어떤 오브젝트를 복제할 것인지 넣도록 나온다. 그래서 앞에서 생성한 Box Prefab 파일을 드래그 드롭하면 넣게 된다.
실행하면 Box Prefab이 복제되어서 오브젝트가 복제된 것을 확인할 수 있다.
Instantiate(원본, 위치, 회전)
Instantiate(GameObject original, Vector3 position, Ouaternion rotation)
instantiate 함수는 세 개의 매개 변수를 받아 위치와 회전 값을 설정할 수 있으며, 위치만 따로 설정은 불가능하며, 세 개의 매개변수 모두 받아야 한다.
위에처럼 코드를 작성하면 두 개의 오브젝트가 각각의 위치로 복제되는 것을 확인할 수 있다.
Quaternion & Euler
유니티에서 회전 정도를 나타내고 연산하는 방식에는 Quaternion 과 오일러 두 가지 방식이 있다.
Euler
360도 각도로 표현할 수 있으며, 연산속도가 느리며 짐벌락 현상이 발생할 수 있다.
Quaternion
x,y,z,w로 4원수 형태로 -1에서 1 사이의 값으로 표현한다.
연산속도가 빠르며 짐벌락 현상이 발생하지 않는다는 장점이 있으며, 현재 instantiate 함수에 사용되는 세 번째 매개 변수 회전 정보는 quaternion으로 나타낸다.
하지만 통상적으로 360도 회전 방식과 같이 원하는 특정 각도로 설정하기 어려움이 있다.
짐벌락 현상이란?
세 개의 축이 서로 종속적인 관계를 가지고 있기 때문에 발생하는 문제로 회전 연산 도중 축이 하나 사라져 3차원 오브젝트가 일그러지는 현상
유니티에서는 오일러 값을 quaternion 값으로 변형 시켜주는 함수를 제공한다.
GameObject clone = instantiate()
GameObject clone = Instantiatr(GameObject original, Vector3 position, Quaternion rotation);
원본 게임 오브젝트를 복제에서 생성하고 생성된 복제 오브젝트 정보를 clone 변수에 저장한다. 색과 크기, 위치 값을 변경할 수 있다.
'자기개발 > Unity' 카테고리의 다른 글
[유니티 기초] 게임오브젝트 삭제 함수 (0) | 2024.04.16 |
---|---|
[유니티 기초] 인스턴스 활용 예제 (0) | 2024.04.16 |
[유니티 기초] 게임오브젝트 물리와 충돌 (0) | 2024.04.10 |
[유니티기초] 게임오브젝트 이동 (0) | 2024.04.10 |
[유니티 기초] 유니티 이벤트 함수 (2) | 2024.04.10 |