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
★☆☆☆☆
반응형
'개발 > Unity' 카테고리의 다른 글
Unity) 플랫폼 의존 컴파일 (0) | 2020.02.12 |
---|---|
Unity) NevMesh 사용해서 길찾기 (0) | 2020.01.10 |
Unity) Mac / Window 에서 VScode 스크립트 자동정렬 (0) | 2020.01.06 |
Unity) 최적화 - 정적 게임 오브젝트(Static Object) (0) | 2019.12.20 |
Unity) 특정 값을 제외한 랜덤한 값 구하기 (0) | 2019.12.16 |
댓글