【问题标题】:Unity Question: Transforming world coordinates to my Radar's Coordinates for 3D RadarUnity 问题:将世界坐标转换为我的 3D 雷达的雷达坐标
【发布时间】:2021-07-04 19:49:33
【问题描述】:

我正在学习 Unity3D,但我的 3D 雷达遇到了一些问题。我的雷达是我的 Player 游戏对象的子对象,它在我飞行时旋转。雷达本身旋转了 45 度,因此它面向用户。有一个立方体应该是敌机的雷达信号。 Cube 是 Radar 的子对象,因此应该继承它的旋转。 Cube 上有一个脚本可以在每次 update() 时更新自身。这是层次结构:

Enemy Plane
Player
-- Camera
-- Radar
------ Cube (radar representation of Enemy Plane)

问题在于,当立方体本身旋转时,使用雷达,它的运动不是。当我靠近敌机时,立方体只是靠近相机(这很好),但我希望它的运动跟随父雷达对象的 45 度旋转?

public class RadarGlyph : MonoBehaviour
{
    GameObject radarSource;
    GameObject trackedObject;
    Vector3 radarScaler;

    void Start()
    {
        this.radarSource = GameObject.Find("Radar");
        this.trackedObject = GameObject.Find("Enemy Fighter");
        this.radarScaler = new Vector3(0.001f, 0.001f, 0.001f);
    }

    void Update()
    {
        Vector3 vDelta = this.trackedObject.transform.position - this.radarSource.transform.position;
        vDelta.Scale(this.radarScaler);
        this.transform.localPosition = this.transform.InverseTransformDirection(vDelta);
    }
}

【问题讨论】:

  • 你能解释一下立方体是如何移动的以及它应该如何移动吗?目前有点难以想象。
  • 如果我直奔敌舰,立方体会直接朝我移动。相反,它应该以雷达的微小角度移动。就像它在我的空间中移动一样,根本不使用雷达旋转,即使立方体是雷达的子对象。
  • 我在回答中建议的两项更改中的一项是否有效?
  • 是的,我试过第一个,效果很好。但为什么?为什么我必须由它的父级旋转它,它不应该由它的父级旋转吗?
  • 我编辑了我的答案以包含一些解释。感谢您的支持!

标签: unity3d


【解决方案1】:

要获得完整的解决方案,您必须首先获取目标在舰船上的位置,然后在信号和雷达的上下文中重新创建它。

作为一种快速修复,您可以尝试像这样更改最后一行:

this.transform.localPosition = this.parent.localRotation * this.transform.InverseTransformDirection(vDelta);

或者(显然不像你提到的那样好)

this.transform.localPosition = Quaternion.Inverse(this.parent.localRotation) * this.transform.InverseTransformDirection(vDelta);

其中一个肯定会起作用。 (第一个做到了)

编辑:这是第三种选择

this.transform.localPosition = this.transform.parent.parent.InverseTransformDirection(vDelta);

这个获取玩家空间中的位置并将其应用于雷达空间。

第一个和第三个正在尝试做同样的事情。 由于您将方向转换为 blip 的坐标系,因此其父级的任何旋转都会被抵消。相反,正确的做法是先获取相对于 Player 的位置。然后将其应用于雷达中的光点。我在这里的第三行代码试图做到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多