2D 공간에서 오브젝트를 이동시키는 방법을 소개합니다. 3D 공간 및 2D 공간에서는 보통 position을 이용하여 절대 좌표를 움직입니다. 2D 공간에서 만약 UI를 사용한다면 RectTransform을 사용할 수 있는데 이런 경우 anchoredPosition을 주로 사용합니다. RectTransform의 anchoredPosition은 Inspector 창에서 보이는 좌표를 보이는 그대로 편리하고 정확하게 사용할 수 있기 때문에 자주 사용합니다. 오브젝트 방향을 정하고 반복문에 오브젝트를 그 방향으로 이동시키면 쉽게 이미지를 이동시킬 수 있습니다. 이번 예시에서는 이동 방향을 아래로(Vector2.down) 하여 오브젝트가 떨어지게 했습니다. 왼쪽 마우스의 인풋 값을 받아서 왼쪽 마우스를 클릭했을 때 오브젝트를 생성하면 자동으로 떨어지고 오브젝트의 y 위치가 화면 밖으로 벗어났을 때 자동으로 파괴됩니다. 예시에서는 Vector2의 방향 기준으로 아래로 했지만 up, right, left 하면 위, 오른쪽, 왼쪽으로 이동할 수도 있습니다. float형 변수 speed를 바꿔주면 움직이는 속도를 더 느리거나 빠르게 할 수 있습니다. 이러한 움직이는 효과는 파티클을 사용할 수도 있겠지만 간단하게 구현하기에 좋습니다. 총이나 특정 물건을 피하는 게임이나 겨울에 눈이 떨어지는 효과 등 다양하게 사용됩니다.
C# (UNITY 3D)
마우스 왼쪽 클릭을 하면 이미지 오브젝트들이 생성되어 아래로 떨어지고 화면 밖으로 나갔을 때 자동으로 파괴되는 예시입니다. 현재 화면 안에 있는 오브젝트의 개수를 표시합니다.
using UnityEngine.UI;
현재 화면에 있는 프리팹의 개수 표시용 Text를 사용하기 위해 UnityEngine.UI를 사용합니다.
각 오브젝트를 컴포넌트에 맞게 할당합니다.
public GameObject pref;
public Transform parent;
public Text text_count;
private float speed = 8;
private void Update()
{
Get_Mose();
Check_Transforms();
Get_Count();
}
private void Get_Mose()
{
if (Input.GetMouseButtonDown(0))
{
Function_Instantiate();
}
}
private void Function_Instantiate()
{
//CodeFinder 코드파인더
//From https://codefinder.janndk.com/
Vector2 mousePos = Input.mousePosition;
GameObject inst = Instantiate(pref, parent);
inst.transform.position = mousePos;
}
private void Check_Transforms()
{
for (int i = 0; i < parent.childCount; i++)
{
RectTransform rect = parent.GetChild(i).GetComponent<RectTransform>();
if (rect.anchoredPosition.y < -(Screen.height + rect.rect.height) / 2)
{
Destroy(rect.gameObject);
continue;
}
rect.anchoredPosition += Vector2.down * speed;
}
}
private void Get_Count()
{
int count = parent.childCount;
text_count.text = count.ToString();
Debug.LogFormat("Count : {0}", count);
}
변수(variable)
pref(GameObject) : 생성할 이미지 오브젝트 프리팹
parent(Transform) : 생성한 프리팹을 넣어둘 부모
text_count(Text) : 현재 화면 안에 있는 프리팹 개수
speed(float) : 움직이는 속도
함수(function)
Get_Mose : 마우스의 인풋 값을 받아서 함수 실행
Function_Instantiate : 프리팹 생성
Check_Transforms : 생성된 오브젝트들이 화면 안에 있는지 확인 및 밖으로 벗어났을 때 파괴
Get_Count : 생성된 프리팹 개수 가져오기
UI RectTransform 2D 오브젝트 이동 / 떨어지는 물건 피하기 게임 / 오브젝트가 화면 안에 있는지 체크 / Check Objects in Screen / 오브젝트 한 방향 이동 / Falling Objects
'Unity3D > C#' 카테고리의 다른 글
Unity Cursor Tail (Instantiate, Destroy Delay) (0) | 2020.11.08 |
---|---|
Unity 클릭으로 오브젝트 생성, 파괴 (Instantiate/Destroy) (0) | 2020.11.07 |
유니티 2D LookRotation으로 클릭한 방향을 쳐다보게 하기 (4) | 2020.11.05 |
유니티 마우스 클릭 시 그 위치로 2D 오브젝트 이동시키기 (4) | 2020.11.04 |
Unity Mouse Cursor를 천천히따라다니는 2D 오브젝트 (0) | 2020.11.04 |