유니티 객체 합치기 Merge

2020. 11. 23. 11:36유니티실습

반응형
728x170

안녕하세요 유니티 비기너입니다.

이번 시간에는 동일한 객체를 합쳐 새로운 객체를 만들어내는 한 방법에 대해 알아보겠습니다.

 

※ 아래 코드는 백지상태에서 방향을 잡고자 만든 심플한 예제로 만든 코드이기 때문에

응용하시는 분들은 부족한 부분을 추가, 수정하여 사용하셔야 합니다.

 

결과 화면

드래그 & 드랍을 활용하여 동일한 객체를 합체하여 새로운 객체를 만드는 화면입니다.

프리팹, 인스펙터

위와 같은 컴포넌트를 포함하는 프리팹을 셋팅하였습니다.

 

각 프리팹이 포함하는 이미지

ItemCode_1
ItemCode_2
ItemCode_4
ItemCode_3
ItemCode_6
ItemCode_12

스크립트

public class MergeObject : MonoBehaviour
{
    private bool isClick;    

    private void OnMouseDown() {
        isClick = false;
    }

    private void OnMouseDrag() {
        Vector3 vpos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        vpos.z = 0f;
        transform.position = vpos;
    }

    private void OnMouseUp() {
        isClick = true;
    }

    private void OnTriggerStay2D(Collider2D collision) {
        string clickObject = transform.name.Substring(transform.name.LastIndexOf("_") + 1);
        string collisionObject = collision.name.Substring(collision.name.LastIndexOf("_") + 1);
        int codeNumber = int.Parse(clickObject) + int.Parse(collisionObject);

        if (isClick && clickObject == collisionObject) {
            GameObject newObject = (GameObject)Instantiate(Resources.Load("ItemCode_"+ codeNumber), transform.position, Quaternion.identity);
            newObject.name = "ItemCode_" + codeNumber;
            Destroy(collision.gameObject);
            Destroy(gameObject);
        }
    }
}

 

OnMouse 기능을 활용하여 오브젝트를 드래그 & 드롭하고 OnTriggerStay2D를 활용하여 조건을 검색하여

동일한 오브젝트의 경우 새로운 오브젝트를 생성하고 이전 오브젝트는 파괴시킵니다.

 

위 코드는 심플한 예제로 만든 코드이기 때문에 응용하시는 분들은 부족한 부분을 채우셔서 사용하셔야 합니다.

 

현재의 코드는 앞에 Itemcode_ 부분을 제외하고 번호를 합쳐 다음 이미지 번호를 가져오는 방식으로 구현되어있지만

 

ex) (1번 오브젝트와 1번오브젝트 머지) 1 + 1 = 2  => Itemcode_2 가져오기

ex) (2번 오브젝트와 2번오브젝트 머지) 2 + 2 = 4  => Itemcode_4 가져오기

 

해당 방식을 그대로 활용하게 되면 오브젝트가 다양하고 많아질수록 

숫자가 겹치는 구간도 발생할 수 있기 때문에 문제가 커지게 됩니다.

 

그래서 해당 부분을 다양한 패턴의 규칙으로 응용하셔서 활용하시면 됩니다. 

ex) 문자열, 알파벳 활용 등등 

 

반응형
그리드형