C# 如何向对象Z旋转添加特定数量?

C# 如何向对象Z旋转添加特定数量?,c#,unity3d,C#,Unity3d,基本上,我想做一件事,我有一辆车,当我在一个特定的区域,车轮转动,我可以飞。它工作得很好,但是我的车前部很重,一升到空中,我就开始向前旋转,所以我试着给车的Z旋转增加一个数字,在这个例子中是前升。我尝试过其他人的解决方案,但没有一个奏效。有了这个,我得到了一个错误,即“运算符“+”不能应用于“四元数”和“向量3”类型的操作数 使用UnityEngine; 公务舱飞行:单一行为 { 公共内部车轮角度=90; 公众浮标最大高度; 公共浮动火箭动力; 公共交通工具; 公共刚体; 公共浮式前升降机; 无

基本上,我想做一件事,我有一辆车,当我在一个特定的区域,车轮转动,我可以飞。它工作得很好,但是我的车前部很重,一升到空中,我就开始向前旋转,所以我试着给车的Z旋转增加一个数字,在这个例子中是前升。我尝试过其他人的解决方案,但没有一个奏效。有了这个,我得到了一个错误,即“运算符“+”不能应用于“四元数”和“向量3”类型的操作数

使用UnityEngine;
公务舱飞行:单一行为
{
公共内部车轮角度=90;
公众浮标最大高度;
公共浮动火箭动力;
公共交通工具;
公共刚体;
公共浮式前升降机;
无效更新()
{
float xPos=transform.position.x;
float yPos=transform.position.y;
如果(xPos>-16&&xPos<15){
foreach(在轮子中变换轮子){
wheel.rotation=四元数Euler(90,0,0);
}
if(Input.GetKey(“空格”)和&yPos

我对unity和c非常陌生,所以这对我来说非常陌生,我不知道从哪里开始。

错误只是说你在添加四元数和向量3。 Unity在内部将旋转存储为四元数。所以下面的代码

transform.localRotation = transform.localRotation + new Vector3(0, 0, frontLift);
应该是

transform.localRotation = Quaternion.Euler(0, 0, frontLift);
transform.localRotation = transform.localRotation * Quaternion.Euler(0, 0, frontLift);

来源:

您可以通过添加两个旋转

然后,为了获得所使用的Euler轴的
四元数
旋转,它应该是

transform.localRotation = transform.localRotation * Quaternion.Euler(0, 0, frontLift);
或者简言之

transform.localRotation *= Quaternion.Euler(0, 0, frontLift);
或者您可以使用,以便围绕某个轴旋转,例如

transform.rotation *= Quaternion.AngleAxis(frontLift, transform.forward);

但是

我可以看到你有一个
刚体。一旦涉及到
刚体
,您就不应该通过
变换
组件获取或设置任何内容,而应该仅通过
刚体
组件

在这里你可以使用


但是,您需要在
FixedUpdate
中执行此操作。

如何使它在按键时不断添加此项?我试着将其放入一段时间(Input.GetKey(“space”)循环中,但所做的只是使unity崩溃,即使frontLift的值非常低
rb.MoveRotation(rb.rotation * Quaternion.AngleAxis(frontLift, rb.rotation * Vector3.forward));