본문 바로가기

Unity3D/C#

유니티 떨어지는 이미지, 화면 벗어나면 자동 파괴

반응형

Falling Objects

 

 

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

 

 

 

반응형