在 Unity 3D 中旋转对象
Posted
技术标签:
【中文标题】在 Unity 3D 中旋转对象【英文标题】:Rotate object in Unity 3D 【发布时间】:2015-02-21 16:25:21 【问题描述】:我可以使用以下代码使用加速度计旋转对象。
transform.rotation = Quaternion.LookRotation(Input.acceleration.normalized, Vector3.up);
但我想旋转对象,例如屏幕旋转 - 0、90、180 和 360 度。如何使用 Unity 3D 来实现?
【问题讨论】:
【参考方案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,这里可以放水平速度);
【讨论】:
以上是关于在 Unity 3D 中旋转对象的主要内容,如果未能解决你的问题,请参考以下文章
用于在 Unity3D 中定位 3D 对象的 OpenCV 旋转(Rodrigues)和平移向量
unity 3d实例:创建游戏对象旋转的立方体Unity3D Button图片按钮Box控件Label控件Background ColorColor