어느 객체를 실존하는 세상(인게임)으로 구체화한다.
유니티에서는 Prefab 의 모습으로 객체를 표현한다.
레벨에서 만든 객체를 Hierachy 창에서부터 프로젝트 창으로 드래그&드롭으로 만드는 객체
처음 만들 때 보유한 컴포넌트를 모두 유지하며, 같은 객체를 복제하며 만드는 일종의 원본 객체이다.
(언리얼을 알고 있는 사람이라면, BP클래스와 같은 개념이라고 받아들이면 된다)
이 Prefab 객체는 주로 플레이어의 총알, 필드의 몬스터 등 같은 속성을 가진 객체이지만 일일이 만들기는 번거롭고, 여러 개의 객체가 인게임에 필요할 때 사용한다.
레벨에 배치하지 않은 상태에서 다른 객체가 이 Prefab 객체를 생성하는 방식으로도 사용 가능하다.
단, 이러한 방식은 이 Prefab 객체를 생성하는 코드를 가진 객체는 이미 인게임에 존재해야 한다는 주의해야 할 점이 있다.
=> 인게임에 존재하지 않는 코드를 동작시킬 수 없는 기초적인 원리이다.
코드
public GameObject target;
void Start()
{
Instantiate(target);
}
Instantiate() :
인자로 들어온 객체를 생성하는 함수 (일반적으로 Prefab 객체를 인자로 사용한다)
생성하려는 객체의 위치와 회전값을 설정할 수도 있다.
Instantiate(target, position, rotation);
//position 과 rotation 은 변수의 값으로 들어간다
Spawner 에 포함된 Spawner 스크립트를 통해, Prefab으로 만든 GlobalCube가 클론의 형태로 월드에 나타난다.
이러한 과정을 모두 포함하여 '인스턴스화' 라고 부른다
+ Instantiate() 의 활용
GameObject spawnCube = Instantiate(target);
spawnCube.transform.position = new Vector3(10, 10, 10);
GameObject 속성의 spawnCube에 생성하려는 객체 target을 할당하고, 할당된 spawnCube의 위치값을 바꿔주는 코드이다.
이처럼 객체를 단순히 인스턴스화 하는 것만 아니라 객체를 할당 후 상태를 변화시켜 다양한 용도에 맞게 활용할 수 있다.
#7. 정적 변수/함수(Static) (0) | 2024.07.29 |
---|---|
#6. 오버로드(Overload) (0) | 2024.07.28 |
#4. 벡터 연산 (5) | 2024.07.24 |
#3. 클래스와 오브젝트 (0) | 2024.07.18 |
#2. 변수와 함수 (0) | 2024.07.18 |