모든 게임은 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 / 마우스 클릭
'Unity3D > C#' 카테고리의 다른 글
유니티 떨어지는 이미지, 화면 벗어나면 자동 파괴 (0) | 2020.11.22 |
---|---|
Unity Cursor Tail (Instantiate, Destroy Delay) (0) | 2020.11.08 |
유니티 2D LookRotation으로 클릭한 방향을 쳐다보게 하기 (4) | 2020.11.05 |
유니티 마우스 클릭 시 그 위치로 2D 오브젝트 이동시키기 (4) | 2020.11.04 |
Unity Mouse Cursor를 천천히따라다니는 2D 오브젝트 (0) | 2020.11.04 |