본문 바로가기

GameDevelopmentDiary/Project_SomewhereSaga : 가제(맵 에디터에서 중지)

3일차


스케쥴  : Schedule Sheet

MapEditor


  1. InputManager <완료>
    1. Mouse : Click or Touch + Raycast를 사용한 GameObject, UIObject 선택.
    2. Keyboard : 필요하면 추가예정.

  2. ToolBox <25%>
    1. Layout. <50%> 
    2. TileTap. <50%>
    3. Obstacle Tap.
    4. Unit Tap. -미정-

  3. MapEditor(일시 정지)
    1. Canvas지정. <완료>
    2. DrawController 
      • MapData Load 및 파라메터 셋팅. <40%>
      • Tile 및 Obstacle 기본셋팅. <30%>
    3. BrushController
      • Tile 변경. <0%>
      • Obstacle 변경. <0%>
      • Obstacle 위치 이동. <0%>

----------------------------------------------------------------------------------------------------------------------------------------


오브젝트 선택 ( 클릭, 터치 )


void Update () {
#if UNITY_EDITOR // for Click
        if (Input.GetMouseButton(0)) {
            if (EventSystem.current == null || !EventSystem.current.IsPointerOverGameObject()) { //World 영역이면
                //Physics.Raycast & RaycastHit 사용.
            }
            else//UI영역이면
            {
                //GraphicRaycaster.Raycast & RaycastResult 사용.
            }
        }
#endif
#if UNITY_ANDROID // for Touch
        if (Input.touchCount > 0) {
           
            for (int i = 0; i < Input.touchCount; i++)  //멀티 터치 시 마지막 Touch Objects만 선택.
            {
                if (EventSystem.current == null ||  !EventSystem.current.IsPointerOverGameObject()) //World영역이면
                {
                    //Physics.Raycast & RaycastHit 사용.                  
                }
                else{ //UI영역이면   
                   //GraphicRaycaster.Raycast & RaycastResult 사용.     
                }
            }
        }
#endif
    }


Physics.Raycast & RaycastHit
        RaycastHit hit; //Ray 피격 대상.
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        
        if (Input.GetMouseButtonDown(0))
        {
            if (Physics.Raycast(ray, out hit, Mathf.Infinity))
            {
                DrawLine(hit.point, lineColor); //Ray확인.
                //이제 hit 활용
            }
        }


GraphicRaycaster.Raycast & RaycastResult
  
      if (Input.GetMouseButtonDown(0))
        {
            GraphicRaycaster graphicRaycaster = 타겟Canvas.GetComponent(); //ray 발사 장소.
            PointerEventData ped = new PointerEventData(null); //ray 맞는 장소. (UnityEngine.EventSystems 필요함.);
            List results = new List(); // 여기에 히트 된 개체 저장 .  (UnityEngine.EventSystems 필요함.)

            ped.position = Input.mousePosition;// or Touch위치
            graphicRaycaster.Raycast(ped, results);
            //이제 results 활용
        }


Raycast 예제 :

  •   월드의 GameObject : https://docs.unity3d.com/ScriptReference/Physics.Raycast.html
  •   Canvas 내의 GameObject : https://docs.unity3d.com/ScriptReference/UI.GraphicRaycaster.Raycast.html


'GameDevelopmentDiary > Project_SomewhereSaga : 가제(맵 에디터에서 중지)' 카테고리의 다른 글

6,7일차  (0) 2019.03.06
5일차  (0) 2019.03.01
4일차  (0) 2019.02.24
2일차  (0) 2019.02.20
1일차  (0) 2019.02.19