안녕하세요 유니티 비기너입니다.
이번 시간에는 동일한 객체를 합쳐 새로운 객체를 만들어내는 한 방법에 대해 알아보겠습니다.
※ 아래 코드는 백지상태에서 방향을 잡고자 만든 심플한 예제로 만든 코드이기 때문에
응용하시는 분들은 부족한 부분을 추가, 수정하여 사용하셔야 합니다.
결과 화면
드래그 & 드랍을 활용하여 동일한 객체를 합체하여 새로운 객체를 만드는 화면입니다.
프리팹, 인스펙터
위와 같은 컴포넌트를 포함하는 프리팹을 셋팅하였습니다.
각 프리팹이 포함하는 이미지
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) 문자열, 알파벳 활용 등등
'유니티실습' 카테고리의 다른 글
유니티 UI 버튼 이미지 swap (0) | 2020.12.07 |
---|---|
유니티 IsPointerOverGameObject 활용한 겹치는 오브젝트 구별법 (0) | 2020.11.25 |
유니티 ScriptableObject를 활용한 오브젝트 생성 (0) | 2020.11.09 |
유니티 에셋스토어 퍼블리셔 로그인 위치 찾기 (0) | 2020.11.07 |
유니티 2D 그림자 표현해보기 (0) | 2020.11.05 |