본문 바로가기

Unity3D/C#

Unity 클릭으로 오브젝트 생성, 파괴 (Instantiate/Destroy)

반응형

 

 

모든 게임은 2D 혹은 3D 모두 마찬가지로 오브젝트로 구성되어 있고 필요한 오브젝트를 생성하거나 필요 없는 오브젝트는 파괴하는 기능은 매우 유용하게 많이 사용됩니다. 몹이 나타나고 몹을 죽였을 때 사라지게 하거나 죽은 몹에서 아이템을 드롭하고 먹었을 때 아이템이 없어지는 기능 모두 Instantiate와  Destroy로 구현할 수 있습니다. Instantiate와 Destroy는 비교적 무거운 작업이기 때문에 풀링 방식으로 최적화를 고려하여 효율적으로 사용하게 할 수도 있겠지만, 그 역시 Instantiate와 Destroy에 대한 개념을 알아야 더 잘 사용할 수 있고 단순히 생성 및 파괴를 시켜야 하는 경우에 빠르게 코딩할 수 있습니다. 이번 예시에서 단순히 마우스 우 클릭/좌 클릭으로 Prefab을 마우스 위치에서 생성하고 처음 만들어진 오브젝트부터 순서대로 파괴해보도록 하겠습니다.

 

 

C# (UNITY 3D)

 

 

생성 및 파괴 예시

 

왼쪽 마우스를 클릭하면 Prefab이 생성되고 오른쪽 마우스를 클릭하면 가장 먼저 생성된 Prefab부터 하나씩 파괴시킵니다. 현재 생성된 오브젝트의 개수를 출력합니다. 

 

 

 

using UnityEngine.UI;

 

현재 오브젝트 개수를 표시용 Text를 사용하기 위해 UnityEngine.UI를 사용합니다.

 

 

프리팹 만들기

생성할 게임 오브젝트를 프리팹으로 만들어줍니다. 프리팹을 만드는 방법은 Hierarchy에서 만든 오브젝트를 Project 창에 드래그해서 끌고 오면 됩니다.

 

 

할당

자신이 만든 Prefab을 포함하여 각 오브젝트를 스크립트에 할당합니다.

 

 

 


    public GameObject pref; 
    public Transform parent;  
    public Text text_count;
    private int count = 0;
     
    private void Update()
    {
        Get_MouseInput(); 
    }

    //CodeFinder 코드파인더
    //From https://codefinder.janndk.com/ 

    private void Get_MouseInput()
    {
        if(Input.GetMouseButtonUp(0))
        {
            Function_Instantiate();
        }
        if (Input.GetMouseButtonUp(1))
        {
            Function_Destroy();
        }
    }

    private void Function_Instantiate()
    {
        Vector2 mousePos = Input.mousePosition;
        GameObject inst = Instantiate(pref, parent);
        inst.transform.position = mousePos;
        Change_Count(+1);
    }
    private void Function_Destroy()
    {
        if (parent.childCount.Equals(0))
            return;

        Destroy(parent.GetChild(0).gameObject);
        Change_Count(-1);
    }
    private void Change_Count(int _value)
    {
        count += _value;
        text_count.text = count.ToString();
        Debug.LogFormat("Count : {0}", count);
    }

 

변수(variable)

pref(GameObject) : 생성할(복제할) 프리팹
parent(Transform) : 생성한 오브젝트를 넣어둘 부모 오브젝트
text_count(Text) : count 표시

count(int) : 현재 오브젝트의 수

 

함수(function)

Get_MouseInput : 마우스의 인풋 값 측정 (왼쪽/오른쪽 마우스가 눌렸는지)
Function_Instantiate : 오브젝트 생성
Function_Destroy : 오프젝트 파괴
Change_Count(int) : 개수 변환 및 표시

 

 

 

오브젝트 생성 및 파괴하는 기본적인 방법 / 복사 / Copy / Prefab / 마우스 클릭

 

 

 

반응형