【问题标题】:Rotate object in Unity 3D在 Unity 3D 中旋转对象
【发布时间】:2015-02-21 16:25:21
【问题描述】:

我可以使用以下代码使用加速度计旋转对象。

transform.rotation = Quaternion.LookRotation(Input.acceleration.normalized, Vector3.up);

但我想旋转对象,例如屏幕旋转 - 0、90、180 和 360 度。如何使用 Unity 3D 来实现?

【问题讨论】:

    标签: c# unity3d 3d rotation accelerometer


    【解决方案1】:

    你可以像这样使用transform.rotation

    transform.rotation = new Quaternion(rotx, roty, rotz, rotw);
    

    你可以像这样使用transform.Rotate

    transform.Rotate(rotx, roty, rotz);
    

    Documentation for Quaternion

    Documentation for transform.rotation

    带有加速度计输入的旋转屏幕示例:

    float accelx, accely, accelz = 0;
    
    void Update ()
    {
        accelx = Input.acceleration.x;
        accely = Input.acceleration.y;
        accelz = Input.acceleration.z;
        transform.Rotate (accelx * Time.deltaTime, accely * Time.deltaTime, accelz * Time.deltaTime);
    }
    

    如果要将对象旋转到特定角度,请使用:

    float degrees = 90;
    Vector3 to = new Vector3(degrees, 0, 0);
    
    transform.eulerAngles = Vector3.Lerp(transform.rotation.eulerAngles, to, Time.deltaTime);
    

    这将围绕 x 轴旋转 90 度。

    【讨论】:

    • 我没有足够的声誉来发布超过 2 个链接,但只是谷歌转换。如果您也需要阅读一些相关文档,请旋转。
    • 它仍然没有给我解决这个问题的方法。我不明白你的解释。
    • 说明你到底想做什么
    • “示例屏幕正在旋转 - 0、90、180 和 360 度”在哪个轴(x、y 或 z)上?使用加速度计输入?
    • 如前所述,我想使用加速度计自动旋转场景中的一个对象。你知道屏幕自动旋转是如何工作的吗?我想对场景中的一个对象做同样的事情。
    【解决方案2】:

    为了自己旋转你的游戏对象

    int _rotationSpeed = 15;
    
    void Update () {
    
        // Rotation on y axis
        // be sure to capitalize Rotate or you'll get errors
        transform.Rotate(0, _rotationSpeed * Time.deltaTime, 0);
    }
    

    【讨论】:

      【解决方案3】:

      如果您希望将此添加到游戏对象中,您可以将游戏对象放入脚本中:

      using System.Collections;
      using System.Collections.Generic;
      using UnityEngine;
      
      public class TheNameOfYourScriptHere : MonoBehaviour
      {
          public float speed = 100;
          
          public GameObject yourgameobject;
          
          void Update()
          {
                yourgameobject.transform.Rotate(0, speed * Time.deltaTime, 0);
          }
      }
      

      请注意,这种旋转速度更快,因此您可以更好地看到它的实际效果。

      【讨论】:

        【解决方案4】:

        您可以通过在 .cs 脚本中添加以下行来旋转对象。

        transform.Rotate(Vector3.up,这里可以放水平速度);

        【讨论】:

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