📜  unity如何将鼠标屏幕位置转换为世界位置 - C#(1)

📅  最后修改于: 2023-12-03 15:05:45.567000             🧑  作者: Mango

Unity如何将鼠标屏幕位置转换为世界位置 - C#

在Unity中,鼠标指针的屏幕位置是在2D平面坐标系中的,而在3D空间中,我们需要把它转换成世界坐标系中的位置,以便使用和操作。这篇文章将介绍如何使用C#脚本来实现鼠标位置的转换。

获取鼠标位置

首先,我们需要在每一帧中获取当前鼠标的屏幕位置。我们可以使用Input类的静态方法Input.mousePosition来获取它。

// 获取鼠标当前的屏幕位置
Vector3 mousePos = Input.mousePosition;
设置射线

接下来,我们需要把获取到的鼠标位置转换成一个射线投射在场景中,这样就可以检测到鼠标点击位置在空间中的坐标。

// 设置射线,从屏幕点向场景发射一条射线
Ray ray = Camera.main.ScreenPointToRay(mousePos);

这里我们使用了Camera.main获取当前的相机,然后调用其中的ScreenPointToRay方法,它接受一个Vector3类型的屏幕坐标,并返回一个射线。

检测射线碰撞

接下来,我们可以使用Physics.Raycast()方法去检测射线是否与场景中的物体相交了。如果相交了,我们就可以获取到它的坐标。

// 射线检测
RaycastHit hitInfo;
bool hit = Physics.Raycast(ray, out hitInfo);
if (hit) {
    Vector3 worldPos = hitInfo.point;
}

其中,Physics.Raycast方法接受一个射线和一个射线碰撞信息的struct作为参数。这个方法检测射线是否有碰撞,并把碰撞的结果放到传入的碰撞结果对象中。

如果射线检测到了物体,hitInfo中的point就是鼠标点击处的世界坐标。

总结

通过以上几个步骤,我们就可以将鼠标屏幕位置转换为世界坐标系中的位置了。下面是完整的代码示例:

public class MousePositionToWorld : MonoBehaviour {
    public Camera mainCamera;

    void Update() {
        // 获取鼠标当前的屏幕位置
        Vector3 mousePos = Input.mousePosition;

        // 设置射线,从屏幕点向场景发射一条射线
        Ray ray = mainCamera.ScreenPointToRay(mousePos);

        // 射线检测
        RaycastHit hitInfo;
        bool hit = Physics.Raycast(ray, out hitInfo);
        if (hit) {
            Vector3 worldPos = hitInfo.point;
            Debug.Log("点击位置在世界坐标系中的坐标是:" + worldPos);
        }
    }
}

以上就是将鼠标屏幕位置转换为世界位置的代码实现。