관리 메뉴

도드넷

게임 제작 일지#2 - 유니티 Array 유닛 선택하기! 본문

창고/게임 제작 [시즌2]

게임 제작 일지#2 - 유니티 Array 유닛 선택하기!

도드! 2016. 10. 5. 10:48





게임 제작 일지#2 - 유니티 선택하기!


방금 클릭하는거 배웠으니, 이제 유닛을 이동시켜보자.


스타크레프트 형식으로 클릭한 유닛들을 일정 위치로 이동시켜보려고 한다.


그럼 일단 집합을 만들어야 될것같다.


#1 유니티 집합 Array??


using System.Collections.Generic;

...

    public List<GameObject> Selected_Units;


게임 오브젝트 모음 집합을 만들었다. 실제로 Array 배열보다

여러 유용한 기능도 많아서 가능하다면 List 를 쓰는게 좋다고 본다. :3


 집합을 만들었으니 이제 여기에 클릭한 유닛을 추가해야겠지?



#2 유니티 집합에 원소 추가하기


    if (Input.GetMouseButtonDown(0))

        {
            Vector2 Click_Point = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            Collider2D Click_Coll = Physics2D.OverlapPoint(Click_Point);

            Selected_Units.Clear();
            Selected_Units.Add(Click_Coll.gameObject);
        }


리스트를 사용하면 좋은점이 바로나온다.

Add 메소드, Clear 메소드를 통해 정말 간단히 배열(리스트)을 관리할수있다.


전략 시뮬레이션 게임에서 처럼 좌클릭으로 유닛을 선택하면 이전 유닛 풀은 초기화되고 한 유닛을 선택하게 하기위해 집합에 추가하기전에 Clear 명령을 해준다음 Add 를 해줬다.


좋다


하지만 문제가 발생했다. 내 게임 기획상 물체의 충돌과 클릭을 따로 분류해서 처리해야하므로

콜라이더를 자식요소에 넣어서 자식요소가 실제유닛 대신 등록되고있다.


그럼 해야될건?


#3 유니티 부모찾기 프로젝트


            GameObject Clicked_Unit = Click_Coll.gameObject.transform.parent.gameObject;


유니티 부모 요소 찾는 방법은 해당 게임 오브젝트에 빨간 부분 붙여주면 현재 자신이 붙어있는 부모를 반환하게 된다.

부모의 부모를 찾으려면 해당 게임 오브젝트에 다시한번 빨간부분 붙여주면 된다.


만약, 부모가 존재하지 않으면 오브젝트 레퍼런스 오류가 난다.




#보너스! 유니티 자식요소 찾기 프로젝트


transform.FindChild("자식이름").gameObject;


자식은 부모와 달리 여럿이 있을 수 있기때문에 이름으로 찾아야한다.



흠 좋다.


그런데 클릭한것 아무거나 다 반환하는 문제가 생길수있으니

손님을 좀 가려받자 :3


간단히 생각하면 돌이나 나무를 클릭하면 아무런 반응이 없지만 슬라임 괴물 캐릭터 인퀴지터 타워같은 유닛류만

클릭되게 해보자.




#4 손님 가려받기



            if (Click_Coll.gameObject.tag == "Clickable")
            {
                GameObject Clicked_Unit = Click_Coll.gameObject.transform.parent.gameObject;
                if (Clicked_Unit.tag == "Unit")
                {
                    Selected_Units.Clear();
                    Selected_Units.Add(Clicked_Unit);
                }                                  
            }


클릭한 물체는 일단 Clickable 이라는 태그여야 한다.

그리고 만약 부모요소가 Unit 이라면 해당 유닛을 선택한다.


그렇다 내 게임에서는 모든 선택가능한 물체들


아이템이든 유닛이든 맵이동 마커라던지 비밀통로로 통하는 스위치라던지


모두 자식요소에는 콜라이더가 포함된 클릭용 자식요소가 필요하며

이것은 Clickable 이라는 태그를 달고있다.







반응형
Comments