0

我有一个相机俯视我的游戏世界。我想让用户点击对象。以下脚本附加到 MainCamera。

void Update () {
    if (holdingSomething)
    {
        if (Input.GetMouseButtonUp(0))
        {
            holdingSomething = false;   
        }
    }
    else if (Input.GetMouseButtonDown(0))
    {
        RaycastHit hit;
        Vector3 mousePos = new Vector3(Input.mousePosition.x,Input.mousePosition.y,0);
        Vector3 rayOrigin = new Vector3(Camera.main.ScreenToWorldPoint(mousePos).x,Camera.main.ScreenToWorldPoint(mousePos).y,Camera.main.transform.position.z);
        Vector3 rayDirection = new Vector3(Camera.main.transform.rotation.x,Camera.main.transform.rotation.y,Camera.main.transform.rotation.z);
        Debug.Log("Mouse button is down" + mousePos);
        Debug.Log("rayOrigin " + rayOrigin);
        Debug.Log("rayDirection " + rayDirection);
        Ray ray = new Ray(rayOrigin,rayDirection);
        if (Physics.Raycast(ray, out hit))
        {
            Debug.Log("We just touched " + hit.collider);
        }
    }
}

这条线Debug.Log("We just touched " + hit.collider);永远不会被调用。我不认为我的光线构建正确。这是其他调试消息的输出。在每条消息中,它们的 rayOrigin 都是相同的,即使 mousePos 发生了变化。

Mouse button is down(418.7, 195.1, 0.0)
rayOrigin (0.0, 6.2, -7.3)
rayDirection (0.3, 0.0, 0.0)

Mouse button is down(417.7, 278.0, 0.0)
rayOrigin (0.0, 6.2, -7.3)
rayDirection (0.3, 0.0, 0.0)

那么我哪里错了?

4

1 回答 1

2

我会这样定义你的 Ray:

Ray ray = Camera.Main.ScreenPointToRay(Input.mousePosition);

至于您的代码,我现在无法测试您的代码,所以我不知道到底出了什么问题。因为您应该能够按照您的描述进行操作,即使我的回答是一个更简单的选择。

您可以使用Debug.DrawLine绘制您使用的光线投射的一条线。然后,您可以在运行时在调试器中看到您的光线投射的样子。然后你可以看到你的光线投射是如何定位的。您将能够看到射线的起点和终点。如果其中一个关闭,您可以在知道哪一部分出错的同时检查您的代码。

于 2013-04-12T07:19:14.423 回答