3

这是我正在尝试做的简化代码:

var angle = 1.57;
if ( this.transform.rotation.y > angle ){
  this.transform.rotation.y--;
} else if ( this.transform.rotation.y < angle ){
  this.transform.rotation.y++;
}

我习惯在 AS3 中编写代码,如果我在 flash 中编写代码,它可以完美运行,但在 Unity3D 中却不行,而且我很难弄清楚为什么,或者我如何才能获得这种效果。

有谁能够帮我?谢谢!

编辑:

我的对象是一辆刚体汽车,有 2 个胶囊对撞机在“凹凸不平”的地板上行驶,在某些时候他只是失去了方向精度,我认为这是因为它的层次旋转系统。

(感谢 kay 的 transform.eulerAngles 提示)

4

7 回答 7

12

transform.rotation retrieves a Quaternion. Try transform.rotation.eulerAngles.y instead.

于 2012-02-16T22:02:06.510 回答
3

变换旋转用于设置角度,而不是转动对象,因此您需要获取旋转,添加更改,然后设置新的旋转。

尝试使用 transform.rotate 代替。

在此处查看 Unity3d 脚本参考:http: //unity3d.com/support/documentation/ScriptReference/Transform.Rotate.html

于 2012-05-11T03:00:44.620 回答
1

到目前为止,我看到了两个问题。首先是Unity的分层旋转。根据您要实现的目标,您应该操纵

transform.localEulerAngles
or
transform.eulerAngles

第二件事是,您不能以这种方式修改欧拉角,因为向量都是按值传递的:

transform.localEulerAngles.y--;

你必须这样做:

Vector3 rotation = transform.localEulerAngles;
rotation.y--;
transform.localEulerAngles = rotation;
于 2012-08-03T14:13:27.040 回答
0

上面使用 transform.Rotate() 的建议可能是你实际需要做的让它旋转,但是 transform.Rotate() 的变量是速度/速度而不是方向,所以 transform.Rotate()如果您想要有角度的旋转,则必须使用多个轴。前任:

class Unity // Example is in C#
{
    void Update( )
    {
        gameObject.transform.Rotate(0, 1, 0);
    }
}

这将以 1 的速度围绕其 y 轴旋转对象。

让我知道这是否有帮助 - 如果有阻碍,我可以用不同的方式解释。

于 2012-06-21T20:15:34.763 回答
0

您需要创建一个新的四元数对象

transform.rotation = Quaternion.Euler (transform.rotation.x, transform.rotation.y++, transform.rotation.z);

您还可以使用 transform.Rotate 函数。

于 2012-06-17T16:40:36.663 回答
0

这是我的带有触摸的 GameObject 旋转脚本

//
//  RotateController.cs
//
//  Created by Ramdhan Choudhary on 12/05/13.
//

using UnityEngine;
using System;

public class RotateController
{

        private float RotationSpeed = 9.5f;
        private const float mFingerDistanceEpsilon = 1.0f;
        public float MinDist = 2.0f;
        public float MaxDist = 50.0f;
        private Transform mMoveObject = null;
        private bool isEnabledMoving = false;


        //************** Rotation Controller Constructor **************//
        public RotateController (Transform goMove)
        {
                isEnabledMoving = true;
                mMoveObject = goMove;
                if (mMoveObject == null) {
                        Debug.LogWarning ("Error! Cannot find object!");
                        return;
                }
        }

        //************** Handle Object Rotation **************//
        public void Update ()
        {
                if (!isEnabledMoving && mMoveObject != null) {
                        return;
                }

                Vector3 camDir = Camera.main.transform.forward;
                Vector3 camLeft = Vector3.Cross (camDir, Vector3.down);

                // rotate
                if (Input.touchCount == 1) {
                        mMoveObject.Rotate (camLeft, Input.touches [0].deltaPosition.y * RotationSpeed * Time.deltaTime, Space.World);
                        mMoveObject.Rotate (Vector3.down, Input.touches [0].deltaPosition.x * RotationSpeed * Time.deltaTime, Space.Self);
                }


        }
}
于 2014-09-12T11:07:54.150 回答
0

您应该尝试将旋转因子乘以Time.deltaTime

希望有帮助

和平

于 2013-08-12T01:34:25.353 回答