可以在检测到触摸事件后,判断是否触摸到了角色,如果没有触摸到,则不执行移动操作。可以使用Physics2D.OverlapPoint方法来判断是否在角色位置上有一个碰撞体:
if (Input.touchCount > 0)
{
Touch touch = Input.GetTouch(0);
switch (touch.phase)
{
case TouchPhase.Began:
// 判断是否点中了角色
Vector3 touchPos = Camera.main.ScreenToWorldPoint(touch.position);
Collider2D hitCollider = Physics2D.OverlapPoint(touchPos);
if (hitCollider != null && hitCollider.gameObject == gameObject) // 点中的是角色本身
currentCircle = Instantiate(circlePrefab, transform.position, Quaternion.identity);
break;
// ...
default:
if (currentCircle != null)
Destroy(currentCircle);
// 如果点击到了角色,则执行移动操作
if (hitCollider != null && hitCollider.gameObject == gameObject)
StartCoroutine(MoveToTarget());
break;
}
}
注意,在其他case分支结束时,也需要判断当前光圈是否为空并销毁它。