Unity向量按照某一点进行旋转
本文实例为大家分享了Unity向量按照某一点进行旋转的具体代码,供大家参考,具体内容如下
一、unity的旋转
首先要知道一点就是在Unity的旋转中使用过四元数进行旋转的,如果对一个物体的rotation直接赋值你会发现结果不是你最终想要的结果,这个时候我们需要去借助Quaternion来进行旋转。
二、向量按照原点进行旋转
用到的Unity内置方法Quaternion.AngleAxis(floatangle,Vector3axis)
第一个参数就是我们需要旋转的角度angle大于0时是按照顺时针的方向进行旋转,angle小于0是按照逆时针的方向旋转,这里的旋转时按照坐标原点进行的旋转。
第二个参数是旋转轴,围绕哪一个坐标轴进行旋转。
注意:使用这个方法时获得的也是四元数,我们将其转换成向量Vector3是需要乘以自身的坐标(四元数*自身向量,如果反过来自身向量*四元数在Unity会发生编译错误,这里需要注意一下)
案例:将Vector3(1,0,1)按照原点旋转45°,90°,180°,270°测试分别用黑、黄、蓝、绿颜色表示
代码如下:
usingUnityEngine; [ExecuteInEditMode] publicclassVectorDirTest:MonoBehaviour{ //Updateiscalledonceperframe voidUpdate(){ Debug.DrawLine(Vector3.left*5f,Vector3.right*5f,Color.red); Debug.DrawLine(Vector3.up*5f,Vector3.down*5f,Color.green); Debug.DrawLine(Vector3.forward*5f,Vector3.back*5f,Color.blue); Vector3dir=newVector3(1,0,1); Debug.DrawLine(Vector3.zero,dir,Color.white); Debug.DrawLine(Vector3.zero,Quaternion.AngleAxis(45,Vector3.up)*dir,Color.black); Debug.DrawLine(Vector3.zero,Quaternion.AngleAxis(90,Vector3.up)*dir,Color.yellow); Debug.DrawLine(Vector3.zero,Quaternion.AngleAxis(180,Vector3.up)*dir,Color.blue); Debug.DrawLine(Vector3.zero,Quaternion.AngleAxis(270,Vector3.up)*dir,Color.green); } }
三、向量按照指定位置进行旋转
//////围绕某点旋转指定角度 /// ///自身坐标 /// 旋转中心 /// 围绕旋转轴 /// 旋转角度 /// publicVector3RotateRound(Vector3position,Vector3center,Vector3axis,floatangle) { returnQuaternion.AngleAxis(angle,axis)*(position-center)+center; }
案例:将Vector3(1,0,1)按照Vector(2,0,2)旋转45°,90°,180°,270°测试分别用红、黄、蓝、绿颜色表示
代码如下:
usingUnityEngine; [ExecuteInEditMode] publicclassVectorDirTest:MonoBehaviour{ //Updateiscalledonceperframe voidUpdate(){ Debug.DrawLine(Vector3.left*5f,Vector3.right*5f,Color.red); Debug.DrawLine(Vector3.up*5f,Vector3.down*5f,Color.green); Debug.DrawLine(Vector3.forward*5f,Vector3.back*5f,Color.blue); Vector3dir=newVector3(1,0,1); Vector3point=newVector3(2,0,2); Debug.DrawLine(Vector3.zero,RotateRound(dir,point,Vector3.up,45),Color.red); Debug.DrawLine(Vector3.zero,RotateRound(dir,point,Vector3.up,90),Color.yellow); Debug.DrawLine(Vector3.zero,RotateRound(dir,point,Vector3.up,180),Color.blue); Debug.DrawLine(Vector3.zero,RotateRound(dir,point,Vector3.up,270),Color.green); Debug.DrawLine(Vector3.zero,dir,Color.black); } //////围绕某点旋转指定角度 /// ///自身坐标 /// 旋转中心 /// 围绕旋转轴 /// 旋转角度 /// publicVector3RotateRound(Vector3position,Vector3center,Vector3axis,floatangle) { returnQuaternion.AngleAxis(angle,axis)*(position-center)+center; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。