如何冻结 z 和 y 轴方向的旋转? Unity3D

Posted

技术标签:

【中文标题】如何冻结 z 和 y 轴方向的旋转? Unity3D【英文标题】:How to freeze rotation in the z & y axes directions? Unity3D 【发布时间】:2021-09-27 08:13:34 【问题描述】:

如果物体分布不均匀,我有一个可以在宽圆柱上摆动的平台。

为此,我创建了一个带有网格碰撞器的圆柱体,在其顶部放置了一个平台,其中心彼此重合。

然后我在平台上附加了一个代码,冻结了它的位置,即平台现在只能旋转,不能下降。

代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DeterminantOfPlatformEquilibrium : MonoBehaviour

   Vector3 newYPos;

    void Start()
    
    newYPos = transform.position;
    

    void Update()
    
        /*We're setting the position of the object in the
        "y" direction - unchanged, and equal to zero, 
        so that the platform does not fall becaude of gravity*/
newYPos.y += 0.0f;
transform.position = newYPos;
newYPos += new Vector3(0f, 0f, 0f);

    

除了冻结平台的位置,我还必须冻结它在 y 和 z 方向的旋转,以便它只在一个方向旋转 - 在 x 中。

我尝试使用 Quaternion 类中对 Euler () 方法的调用来执行此操作,将某个旋转角度设置为 x 轴,并将其他 2 个轴设置为零,在我看来,一切都应该工作,但这条线在我的代码中似乎没有做任何事情:Quaternion rotation = Quaternion.Euler(23f, 0f, 0f);

您有更多可能的选项来冻结这两个轴吗?

【问题讨论】:

【参考方案1】:

我知道您是 Unity3D 的新手。 您的“位置冻结”实际上什么也没做,您只是在位置上加零,而在某些东西上加零并不会改变它。如果你的圆柱体没有Rigidbody 组件,它就不会因为重力而下落。

您的旋转对您没有任何作用,因为您创建了一个名为 rotation 的变量,但您没有将它分配到任何地方。此外,您可以将 Vector3.right 乘以 X 值,而不是为 Y 和 Z 写零。所以在 X 方向上旋转你的圆柱体的代码是:

transform.rotation = Quaternion.Euler(Vector3.right * 23f);

【讨论】:

是的,你是对的,如果平台没有刚体组件,那么它就不会倒下,但实际上平台的位置并没有改变,即使它是一个刚体,也就是我的“位置冻结”作品。但不幸的是,您建议的代码行将平台沿 x 方向旋转 23 度,并且当平台上有物体时它不再移动。 请注意,虽然最后一条语句是正确的,但它在很大程度上取决于 Quaternion.Euler 的实现是否更有效地执行组件明智的 Vector3 乘法与浮点数或单独传入组件并让 Unity 从他们那里创建一个 new Vecto3 ;) @ArinaAznauryan 我建议的代码行只是一个示例。您应该将 23 更改为您希望 X 成为的数字。如果你的位置冻结是这样的,你可能发布了不同版本的代码,或者刚体冻结了位置约束(对不起,如果我拼错了最后一个词)。【参考方案2】:

我不确定我是否误解了你的问题, 但是这行代码:

Quaternion rotation = Quaternion.Euler(23f, 0f, 0f);

什么都不做,因为你从不使用你创建的变量。 如果你想设置旋转尝试:

transform.rotation = Quaternion.Euler(...)

如果您使用的是刚体,您还可以在检查器中限制围绕特定轴的旋转。

【讨论】:

以上是关于如何冻结 z 和 y 轴方向的旋转? Unity3D的主要内容,如果未能解决你的问题,请参考以下文章

matlab 画图的时候,如何将向上的y轴坐标变成向下的?

Unity3D世界坐标系 ( 左手坐标系 | 游戏物体坐标 | 世界坐标系方向 )

matlab画图的时候,如何改变坐标轴的方向?

0068 3D 旋转:rotateXrotateYrotateZrotate3d

如何理解glm中四元数与向量相乘函数的写法

CSS进阶知识点--3D转换及perspective 属性