【问题标题】:Unity 3D Create Plane at player heightUnity 3D在玩家高度创建平面
【发布时间】:2017-06-22 06:21:12
【问题描述】:

我有一个播放器对象,我正在尝试使用鼠标让播放器看向鼠标位置。这工作正常,但是当播放器上坡或它的高度发生变化时,鼠标光线投射平面不会调整到播放器的高度。

    // Look input
    Ray ray = viewCamera.ScreenPointToRay(Input.mousePosition);
    Plane groundPlane = new Plane(Vector3.up,Vector3.zero);
    float rayDistance;

    if(groundPlane.Raycast(ray,out rayDistance)) {
        Vector3 point = ray.GetPoint(rayDistance);
        //Debug.DrawLine(ray.origin,point,Color.red);
        controller.LookAt(point);
    }

我曾尝试在 Google 上搜索答案,但缺少结果似乎表明我问错了问题。我还查看了 Plane 的 Unity 文档,但我不明白我在寻找什么。任何帮助将不胜感激。我被卡住了,这让我无法在我创建的第一款游戏上取得进展。

【问题讨论】:

  • 您可能只需将pointY 设置为在调用LookAt 之前等于玩家的Y。
  • 感谢建议,我试过了 point.y = transform.position.y;在 LookAt 之前,它似乎执行相同的操作。我认为这会起作用,因为它似乎是有道理的,但没有,我不知道为什么。
  • 所以只要跟进,点 x,y,z 是基于光线投射的。我认为光线投射是基于鼠标的位置,x 和 z 也需要调整。我相信这就是为什么只对 y 进行更改不起作用的原因。
  • 您使用哪种相机风格?自顶向下?等距?
  • 这是一个想法。也许您不想对地平面进行光线投射,因为这只会返回地面上的一个点。相反,您可能想要做的是将光线投射到玩家高度的平面上。这样一来,您从光线投射中获得的点就已经处于玩家高度。

标签: c# unity3d 3d plane


【解决方案1】:

我只是尝试了所有方法,以下似乎有效:

Plane groundPlane = new Plane(Vector3.up,Vector3.zero);

改为

Plane groundPlane = new Plane(Vector3.up,transform.position);

【讨论】:

    猜你喜欢
    • 2019-10-21
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多