본문 바로가기
개발/Unity

코드) Unity 마우스 위치로 유닛 이동

by 테샤르 2020. 1. 8.

Unity 마우스 위치로 유닛 이동

 

간략한 설명은 다음과 같다 .

Update 에서 Unity의 Input Touch 이벤트를 플랫폼에 따라 입력을 받는다.

입력한 상태에 따라서 이벤트에 대한 처리를 한다.

 

입력한 상태가 Click or Press 인 경우에 해당 유닛의 이동에 대한 처리를 한다 ( 마우스 위치 포지션기반)

 

		void Update()
        {

            if (RuleManager.Instance.GetRuleState() != eRULE_STATE.PLAY)
            {
                return;
            }

            Vector2 touchPosition = Vector3.zero;
            bool input = false;
#if UNITY_EDITOR
            if (Input.GetMouseButton(0))
            {
                touchPosition = Input.mousePosition;
                input = true;
            }
#else
        if ( Input.touchCount > 0 )
        {
            touchPosition = Input.GetTouch(0).position;
            input=true;
        }
#endif

            if (input)
            {
                switch (this.m_eInputState)
                {
                    case eINPUT_STATE.END:
                    case eINPUT_STATE.NONE:
                        {
                            this.SetInputState(eINPUT_STATE.CLICK);
                        }
                        break;
                    case eINPUT_STATE.CLICK:
                        {
                            this.m_bClickFlag = true;
                            this.SetInputState(eINPUT_STATE.PRESS);
                            this.m_vTouchInitPosition = touchPosition;
                        }
                        break;
                    case eINPUT_STATE.PRESS:
                        {
                            this.m_bClickFlag = false;
                            this.m_vTouchPosition = touchPosition;
                            this.SetInputState(eINPUT_STATE.PRESS);
                        }
                        break;
                }
            }
            else
            {
                this.m_bClickFlag = true;
                this.m_vTouchInitPosition = Vector3.zero;
                this.m_vTouchPosition = Vector3.zero;

                this.SetInputState(eINPUT_STATE.END);

            }
        }

        #endregion

        #region Private Method
        
        private void SetInputState(eINPUT_STATE _state)
        {
            this.m_eInputState = _state;
            switch (_state)
            {
                case eINPUT_STATE.CLICK:
                case eINPUT_STATE.PRESS:
                    {
                        Ray ray = Camera.main.ScreenPointToRay(this.m_vTouchPosition);
                        RaycastHit hit;

                        if (Physics.Raycast(ray, out hit, Mathf.Infinity))
                        {
                            Vector3 dir = new Vector3(hit.point.x - transform.position.x, 0f, hit.point.z - transform.position.z);
                            transform.rotation = Quaternion.LookRotation(dir);

                        }
                        transform.Translate(Vector3.forward * this.m_fSpeed * Time.deltaTime);

                    }
                    break;
            }
        }
        
        #endregion

 

반응형

댓글