【问题标题】:Ray ray = head.Gaze.What does this do?Ray ray = head.Gaze.这是做什么的?
【发布时间】:2018-08-22 00:30:27
【问题描述】:

这行代码有什么作用?我希望它会向头部注视的地方投射光线。我这样做是为了 Camera.main.ScreenPointToRay(Input.mousePosition);在这里,我可以将光线投射到头部注视的位置,而不是鼠标的位置。

【问题讨论】:

    标签: unity3d


    【解决方案1】:

    射线是具有起始位置和方向的向量。在这种情况下:

    Ray ray = head.Gaze;
    

    您将获得用户正在查看的方向和起点。这很可能与同时让相机向前和位置相同。

    Ray ray = new Ray();
    ray.direction = Camera.main.transform.forward;
    ray.origin = Camera.main.transform.position;
    

    编辑:基于评论

    为了检查碰撞,您将使用 Raycast:

    Raycasthit hitInfo;
    float distance = 10.0f;
    if(Physics.Raycast(ray.origin, ray.direction, out hitInfo, distance)){}
    

    【讨论】:

    • 所以如果我想投射一条光线,从相机到世界,比如说 10 个单位并获得对撞机的变换。这可能吗?你能给我举个例子吗?谢谢你:)
    【解决方案2】:

    要实现这一点,您可以使用 Raycast()。 这是一个例子:

    Ray ray = new Ray(Camera.main.transform.position, Camera.main.transform.forward);
    RaycastHit hit;
    
    if (Physics.Raycast(ray, out hit, 10))
    {
        // test what the raycast hit by checking hit information.
    }
    

    这将从主摄像机的位置投射一条光线,向前(正前方)最大距离为 10 个单位,并将在命中变量中输出命中信息,然后您可以从中进行测试。

    编辑: 由于除了 head.Gaze 之外您没有提供任何其他信息,我无法告诉您它的作用,但假设它被正确命名,它会与 Ray(Camera.main.transform.position , Camera.main.transform.forward); 所以你可以像这样编写光线投射测试:

    RaycastHit hit;
    if (Physics.Raycast(head.Gaze, out hit, 10))
    {
        // test what the raycast hit by checking hit information.
    }
    

    我们需要知道头部对象是什么以及 Gaze 的对象类型是什么。如果它是一条射线,我有 99.9% 的把握它会充当你头部向前看方向的射线。你可以随时测试这个:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-02
      相关资源
      最近更新 更多