private Vector3 mouseWorldPos => Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y,0));
private Collider2D ObjectAtMousePosition()
{
return Physics2D.OverlapPoint(mouseWorldPos);
}
private Vector3 mouseWorldPos => Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y,0));
private Collider2D ObjectAtMousePosition()
{
return Physics2D.OverlapPoint(mouseWorldPos);
}
该回答引用自GPT-3.5,由博主GISer Liu编写:
问题分析:
Camera.main
来获取主摄像机,需要将其修改为获取透视摄像机。using UnityEngine;
public class YourScript : MonoBehaviour
{
// 获取透视摄像机
private Camera perspectiveCamera;
private void Start()
{
// 获取透视摄像机
perspectiveCamera = GetComponent<Camera>();
}
// 获取鼠标点击位置的世界坐标
private Vector3 mouseWorldPos => perspectiveCamera.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, perspectiveCamera.nearClipPlane));
// 检测鼠标点击位置是否有碰撞体
private Collider2D ObjectAtMousePosition()
{
Collider2D[] colliders = Physics2D.OverlapPointAll(mouseWorldPos);
if (colliders.Length > 0)
{
// 返回第一个碰撞到的碰撞体
return colliders[0];
}
else
{
return null;
}
}
}
此解决方案中,我们首先获取透视摄像机,并使用 ScreenToWorldPoint
nearClipPlane
作为 Z 值。Physics2D.OverlapPointAll
如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑