public Vector3 GetRandomRadianPoint(Vector3 targetPos)
{
float angle = Random.Range(-30, 30);
Vector3 myPos = Owner.transform.position;
Vector3 point = Quaternion.AngleAxis(angle, Vector3.up) * ((myPos - targetPos).normalized) * Random.Range(0,3);
Vector3 resultVec3 = targetPos + point;
return resultVec3;
}
这个函数来确定每一个鱼(敌人)跑过来的目标点,就像一群敌人跑过来环形包围一个人那种感觉。
判断鼠标点击,判断点击在UI上。用射线来确定目标点。上面就是移动向目标点选取环形围绕点。
if (Input.GetMouseButtonDown(0))
{
if (CheckGuiRaycastObjects())
{
Debug.LogFormat("-------------------------------->>> 点击在UI上");
return;
}
Vector2 screemMousePos = Input.mousePosition;
Ray ray = camera.ScreenPointToRay(screemMousePos);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 100))
{
//if (hit.collider.tag == "FishPond")
Debug.LogFormat("-------------------------------->>> {0}", hit.point.ToString());
EatPoistion = hit.point;
Debug.DrawRay(camera.transform.position, EatPoistion - camera.transform.position, Color.red, 10);
FishAI[] fishArr = FishRoot.GetComponentsInChildren<FishAI>();
for (int i = 0; i < fishArr.Length; i++)
{
FishAI ai = fishArr[i];
ai.ChangeState(new FishMovetoEat());
}
Debug.DrawRay(camera.transform.position, EatPoistion - camera.transform.position, Color.red, 10);
}
}
bool CheckGuiRaycastObjects()
{
PointerEventData eventDataCurrentPosition = new PointerEventData(EventSystem.current);
eventDataCurrentPosition.position = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
List<RaycastResult> results = new List<RaycastResult>();
EventSystem.current.RaycastAll(eventDataCurrentPosition, results);
return results.Count > 0;
}