개발 조각글

전처리 지시어를 사용해 모바일과 에디터에서 rayCast받기

BaekNohing 2022. 3. 7. 23:26

AR 같은 작업을 사용할 때, 주로 인풋을 raycast로 받게 되는데. 

rayCast위치를 Input.GetTouch(0).position으로 받아버리면, 에디터의 플레이모드에서 확인할 수 없다는 단점이 있는데. (마우스 클릭밖에 되질 않으니까..) 

이 때 #if 와 같은 전처리 지시어를 사용한다면, 인풋을 유니티 에디터에서는 클릭으로만, 그 외의 플랫폼에서는 터치로 인풋을 받아서 ray를 쏠 수 있다.

<rayCastManager.cs 중 일부> 

 public List<RaycastHit> getTouchRayHit()
    {
        List<RaycastHit> rayHitList = new List<RaycastHit>();

#if UNITY_EDITOR
        if (Input.GetMouseButtonDown(0))
        {
            ray = Const.arCamera.ScreenPointToRay(Input.mousePosition);
            Physics.Raycast(ray, out raycastHit);
        }
        else return rayHitList;
#else
        if (Input.touchCount == 0) return rayHitList;

        touch = Input.GetTouch(0);
        if (touch.phase != TouchPhase.Began) return rayHitList;

        ray = Const.arCamera.ScreenPointToRay(touch.position);
#endif

        Physics.Raycast(ray, out raycastHit);
        if (raycastHit.transform != null &&
                raycastHit.transform.TryGetComponent<_objFrame>(out _objFrame _obj))
            _obj._rayHit();
        rayHitList.Add(raycastHit); 

        return rayHitList;
    }

line 5, 12, 19번이 각각 전처리 지시어로써 어느 부분을 컴파일할지 알려주는 부분인데. #if UNITY_EDITOR라는 조건에 따라, 에디터상에서는 line 5 ~ 11번이, 그 이외의 플랫폼에서는 13 ~ 18번이 컴파일되게 된다.