Unity3d Can';t根据鼠标位置将光线从相机向下投射到对象

Unity3d Can';t根据鼠标位置将光线从相机向下投射到对象,unity3d,raycasting,Unity3d,Raycasting,我有一个摄像头俯视我的游戏世界。我希望允许用户单击对象。以下脚本已附加到主摄像头 void Update () { if (holdingSomething) { if (Input.GetMouseButtonUp(0)) { holdingSomething = false; } } else if (Input.GetMouseButtonDown(0)) {

我有一个摄像头俯视我的游戏世界。我希望允许用户单击对象。以下脚本已附加到主摄像头

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(“我们刚刚碰到”+hit.collider)从未被调用。我不认为我的雷被造对了。下面是其他调试消息的输出。在每条消息中,它们的来源都是相同的,即使鼠标点发生了变化

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)

那么我错在哪里呢?

我会这样定义你的光线:

Ray ray = Camera.Main.ScreenPointToRay(Input.mousePosition);
至于你的代码,我现在不能测试你的代码,所以我不知道到底出了什么问题。因为你应该能够按照你描述的去做,即使我的答案是一个更简单的选择


可以使用绘制所用光线投射的线。然后,可以在运行时在调试器中查看光线投射的外观。然后可以查看光线投射的位置。您将能够看到光线的起点和终点。如果其中一个关闭,您可以检查代码,同时知道哪个部分出错。

是的,该代码显然更简单,而且可以正常工作!我很好奇我的初始代码哪里出了问题,所以我将尝试按照你的建议执行Debug.DrawLines。@Michael,你找到哪里出了问题了吗?否则我今晚可以检查你的代码:)