如何获得鼠标相对于世界的坐标?



如何获得鼠标在我使用的场景中的位置:

Vector2 screenPosition = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
Vector2 worldPosition = Camera.main.ScreenToWorldPoint(screenPosition);
Debug.Log(worldPosition);

点击坐标为"56.1 98"的对象。代码的结果是:(6.9,55.2)为什么呢?正常情况下该怎么做呢?

Unity版本:2020.3.15f2

ScreenToWorldPoint接受一个Vector3,并且Vector3的z分量决定返回点到相机的距离。在你的例子中,你不知道相机和被点击对象表面之间的距离。所以你必须使用光线投射:

Ray ray = Camera.main.ScreenPointToRay( screenPosition );
if( Physics.Raycast( ray, out RaycastHit hit ) ) // Check if we've clicked on an object with Collider
{
Vector3 clickedSurfacePosition = hit.point; 
Debug.Log( clickedSurfacePosition );
Vector3 clickedObjectTransformPosition = hit.transform.position;
Debug.Log( clickedObjectTransformPosition );
}

如果你正在使用2D物理:

RaycastHit2D hit = Physics2D.GetRayIntersection( Camera.main.ScreenPointToRay( screenPosition ) );
if( hit ) // Check if we've clicked on an object with Collider2D
{
Vector2 clickedSurfacePosition = hit.point;
Debug.Log( clickedSurfacePosition );
Vector3 clickedObjectTransformPosition = hit.transform.position;
Debug.Log( clickedObjectTransformPosition );
}

最新更新