티스토리 뷰

IT지식

Unity Instantiate 사용

민자르 2018. 6. 26. 12:19
반응형

Instantiate 는 아주 유용하다. 오브젝트를 복세하는 것입니다. original 매개 변수에 명시된 개체를 복제하여 position에 명시된 위치에 복제품을 위치시키며, rotation 변수에 따라 회전 값을 설정한 후 개체를 반환합니다. 에디터에서 복사하여 하나 더 만드는 기능과 같은 역화를 합니다.


만일 게임 오브젝트, 컴포넌트 또는 스크립트 인스턴스가 넘겨진 경우, Instantiate 함수를 사용하면 소속된 게임 객체 계층을 하위객체도 빠짐없딩 통째로 복제합니다.



// 각각 떨어진 2개 조립유닛 10카피를 예로 설명합니다.

var prefab : Transform;

for (var i : int = 0;i< 10; i++) {
    Instantiate(prefab, Vector3(i* 2.0, 0, 0), Quaternion.identity);
}


위 소스는 prefab을 10개 복제하는데 간격을 x 기준으로 2씩 위치 시켰습니다. 



Instantiate 사용하는 곳을 어디가 좋을지 고민해봅시다. 


1. AI 가진 적

2. 발사체

3. UI에서 Listview에 들어 가는 item

4. 파티클

5. 퍼즐게임에서 블럭


위에 정도 외에도 사용할 수도 있지만 주로 많이 사용하는 곳입니다. 단 실시간으로 Instantiate 이용해서 생성 시키는 것은 바람직하지 않습니다. 미리 생성 시키고 사용하는 것이 좋습니다.


// Missile 스크립트가 부착된 프리팹을 생성합니다
var projectile : Missile;

function Update()
{
    // Ctrl키가 눌러졌습니다, 발사체를 발사합니다
    if (Input.GetButtonDown("Fire1"))
    {
        //  발사체를 이 transform에 명시된 위치와 회전값에 맞춰 생성해줍니다
        var clone : Missile;
        clone = Instantiate(projectile, transform.position, transform.rotation);

        // 미사일 시간 제한 폭파를 5초로 설정합니다
        clone.timeoutDestructor = 5;
    }
}


객체를 복제하고 난 후에 사용자는 GetComponent 함수를 이용하여 복제된 객체에 부착된 특정 컴포넌트의 속성을 설정할 수 있습니다.



간단하게 처리할 수 있는 퍼즐 게임의 중요 부분 예를 살폎 봅시다.



1. 먼저 초기 블럭을 위치할 장소에 적당히 위치 시키기


public Transform brick;

void Start()
{
    for (int y = 0; y < 5; y++)
    {
        for (int x = 0; x < 5; x++)
        {
            Instantiate(brick, new Vector3(x, y, 0), Quaternion.identity);
        }
    }
}


위 5x5 에 prefab 으로 만든 brick 위치 시킵니다. 일단 초기 셋팅은 된 것입니다.


2. 블럭을 파괴 시켜 보기


public GameObject bang;
public float dur = 3f;

IEnumerator Start()
{
    yield return new WaitForSeconds(
dur);
    KillSelf();
}
  

void 
KillSelf()
{
    
GameObject bangClone (GameObject)Instantiate(bang,transform.position,transform.rotation);

  
bangClone.GetComponent<MyScript>() .someVariable = GetComponent<MyScript>().someVariable; 

 

  Destroy(gameObject);

}

어떤 상항이 되면 블럭을 파괴시키면 됩니다.  특정 조건이 되었을때 3초후에 파괴됩니다. 특정 조건은 게임룰마다 다르니 자신이 원하는 룰을 만들어 적용합시다.

블럭의 상태로 처리하는게 좋습니다. 그래야 상태에 따라서 블럭이 특정  prefab로 바꾸거나 애니메이션 연출을 시켜 보는게 좋습니다. 위 소스는 아주 간단하게 한 것이니 카피해서 가져다 사용하시면 안되고 그냥 저렇게 하는 구나 라고 이해하시면 됩니다.






728x90
반응형
댓글