在GUI

时间:2017-01-05 14:28:12

标签: c# unity3d

我在一个场景中有一个相机播放器。 2D场景指南针的3D场景。场景包含一个固定的北方,我想在我的指南针上用针指示,但我该怎么办呢?  到目前为止,我使用Tutorial尝试了此代码,但根据我的北方,我的针移动方向不合适。

   public void ChangeNortDirection() {

        northDirection.z = player.eulerAngles.y;
        northLayer.localEulerAngles = northDirection;

    }

enter image description here

3 个答案:

答案 0 :(得分:1)

您将北方向设置为播放器的y轴,因此如果播放器旋转,则向北方向旋转。

你想要做的是有一个表示绝对北方向的变量,然后只是按照玩家旋转的相反方向旋转指南针。

另一件事是,这是在2D还是3D空间?在2D中,您只想始终旋转z轴而不是触摸x和y轴。在3D中,北方向应仅在z轴上定义,以便只有x和y平面旋转。

如需最终答案,请提供更多信息。

答案 1 :(得分:0)

在查看教程并看到你做了什么后,我提出了一个想法。

你遇到的唯一问题是,当指针仍然在旋转时,指针不会向北看,而是指向其他东西。

在您的情况下,您可以轻松添加一个简单的值,该值与罗盘指针的初始状态相加。 罗盘指针仍然会随着你的角色Y旋转而旋转,但罗盘指针将指向与通常不同的方向。

public float extraOffset; /* Edit this inside the editor on playmode until 
your pointer points towards your north.
Then remember that value and set it while you are not in playmode.*/
public void ChangeNortDirection() {

    northDirection.z = extraOffset + player.eulerAngles.y; // Just added the simple extraoffset variable and you are good to go.
    northLayer.localEulerAngles = northDirection;

}

还记得尽可能好地解释你的问题,因为我们很难知道确切的问题是什么。 例如,告诉我们你的游戏是2D还是3D,以及问题主题背后的最初想法是什么。

希望这会对你有所帮助。

  • Mennolp

答案 2 :(得分:0)

我猜你的问题与之前的问题有关:很高兴看到你现在正在使用Unity UI系统(但是你可以给人们超过here一些反馈意见他们的回答/评论)!

关于你当前的问题,最好的(也是最简单的)解决方案之一就是让你的玩家进行前向变换(场景视图中的蓝轴)并使用它的X和Z值(Y不能和#39;重要的是获得你想要的角度:

northLayer.localEulerAngles = new Vector3(0.0f, 0.0f, Mathf.Atan2(player.forward.x, player.forward.z) * Mathf.Rad2Deg);

此示例考虑您的northDirection向量为0,0,1,当northLayer设置为0时,localEulerAngles.z指向北方(当然northLayer }是 RectTransform 组件。)

希望这有帮助,