在 Unity 中,想要根据鼠标当前的屏幕坐标判断场景里被点击到的世界物体,可以结合摄像机发射的射线和物理系统的 Raycast 来完成。思路是:先由主摄像机把鼠标位置转换成一条从镜头出发、穿过屏幕点的射线,再让射线去和场景中的碰撞体求交,拿到命中的 GameObject 后就能根据其 tag 做后续判断。
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
Physics.Raycast(ray, out hit);
string tag = hit.collider.gameObject.tag;
Debug.Log("click is " + tag);
if (tag == "enemy")
{
_target = hit.collider.gameObject;
this.applyTarget();
}
上面的片段演示了完整的流程:通过 Camera.main.ScreenPointToRay 把鼠标屏幕坐标转换为射线,再调用 Physics.Raycast 进行碰撞检测,命中之后从 hit.collider.gameObject 取出被点中的物体,并读取它的 tag。如果 tag 是 enemy,就把该物体记录为当前目标,随后调用 applyTarget 执行后续逻辑。