物体的旋转

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;

}

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 该系列笔记基于Unity3D 5.x的版本学习,部分API使用和4.x不一致。 目前在Unity3D中,除了新的U...
    某人在阅读 2,750评论 0 2
  • 这是今天的成果吧,虽然还是没有全部完成,但是大致的功能已经实现,飞机的移动,限制移动范围,子弹的发射,消灭敌人,敌...
    Unity学习的路上阅读 2,963评论 1 2
  • 今天是传说中的双11,很多人购物疯狂,对我来说,无感。 没有买东西,甚至故意躲开这个日子,怕物流会堵塞,怕买到的东...
    真冉阅读 186评论 0 0
  • 心得整理2016 一、战略类 1、更新社会关系,与让自己强大一样重要 2、人的成功往往是看把自己放到什么样的环境里...
    wilapad阅读 513评论 0 0
  • 听风轻敲窗玻璃 在初冬的薄凉里 天快要亮了 碾过岁月的年轮 终是老了容颜 昔日的青丝年少 在不留意时走丢 喜欢被爱...
    田萍阅读 192评论 0 10

友情链接更多精彩内容