物体的旋转

2017-10-17  本文已影响0人  壹米玖坤

1.1物体的旋转

1.1.1对象的旋转方式

(1)transform.Rotate

应用一个欧拉角的旋转角度,eulerAngles.z度围绕z轴,eulerAngles.x度围绕x轴,eulerAngles.y度围绕y轴。

transform.Rotate(Vector3.right*Time.deltaTime);//默认绕自身坐标轴转transform.Rotate(Vector3.up*Time.deltaTime,Space.World);//绕世界坐标轴

transform.Rotate(Time.deltaTime, 0, 0);//围绕x轴每秒1度慢慢的旋转物体

transform.Rotate(Vector3.right,Time.deltaTime);//围绕x轴每秒1度,慢慢的旋转物体

(2)Transform.rotation

在世界空间坐标物体变换的旋转角度作为Quaternion储存。

Quaternion.identity就是指Quaternion(0,0,0,0),就是每旋转前的初始角度,是一个确切的值,而transform.rotation是指本物体的角度,值是不确定的,比如可以这么设置transform.rotation = Quaternion.identity;

一个是值类型,一个是属性变量。

float tiltAroundZ =Input.GetAxis("Horizontal") * tiltAngle;float tiltAroundX =Input.GetAxis("Vertical") * tiltAngle;Quaternion target =Quaternion.Euler(tiltAroundX, 0, tiltAroundZ);

//通过一定的时间,从自身角度转向target目标角度。

transform.rotation =Quaternion.Slerp(transform.rotation, target, Time.deltaTime * smooth);

(3)transform.localEulerAngles

旋转作为欧拉角度,相对于父级的变换旋转角度。

rotationY += Input.GetAxis("Mouse Y") * sensitivityY;

//经过测试,如果这里没用+=那么会转不动

rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);

//上面的Clamp是为了显示rotationY的旋转范围

transform.localEulerAngles = new Vector3(-rotationY, transform.localEulerAngles.y, 0);

(4)transfomr.eulerAngles

transform.eulerAngles = newVector3(x, y,z);

x、y、z角代表绕z轴旋转z度,绕x轴旋转x度,绕y轴旋转y度。不要分别设置欧拉角其中一个轴(例如:eulerAngles.x = 10;),因为这将导致偏移和不希望的旋转。当设置它们一个新的值时,要同时设置全部,如上所示。

1.1.2旋转示例

(1)鼠标拖拽示例

public class SpinWithMouse : MonoBehaviour

{

public float speed = 0.3f;

private Vector3 mousePos;

//使用OnMouseDown方法时,需要在被拖拽物体身上挂上碰撞体

IEnumerator OnMouseDown()

{

//记录鼠标点击时的位置

mousePos = Input.mousePosition;

while (Input.GetMouseButton(0))

{

//鼠标拖拽后的位置

Vector3 offset = mousePos - Input.mousePosition;

float x = Input.mousePosition.x - mousePos.x;

float y = Input.mousePosition.y - mousePos.y;

x = Mathf.Abs(x);

y = Mathf.Abs(y);

//当x方向移动量比y方向多时只执行旋转x轴

if (x > y)

{

transform.Rotate(Vector3.up * offset.x * speed, Space.World);

}

//当y方向移动量比x方向多时只执行旋转y

if (y > x)

{

transform.Rotate(Vector3.forward * offset.y* speed, Space.Self);

}

//重新获取鼠标坐标轴

mousePos = Input.mousePosition;

yield return null;

}

}

}

上一篇 下一篇

猜你喜欢

热点阅读