Unity常用操作代码
这些是我从别的博客上看到的,觉得很有用,就转到我自己的博客中来了,方便以后自己看,在文章最后,就是原博客地址。
1:已知3D坐标和一个旋转角度,及一段距离,求目标点的3D坐标
已知当前点为target,目标点沿着target的Y轴旋转30度,沿着target的X轴延伸10米,求目标点新的3D坐标
1 1 using UnityEngine; 2 2 using System.Collections; 3 3 4 4 public class Test:MonoBehaviour 5 5 { 6 //目标 7 6 public Transform target; 8 7 9 8 void LateUpdate(){ 10 9 Quaternion rotation=Quaternion.Euler(0f,30f,0f)*target.rotation; 11 Vector3 newPos=rotation*new Vector3(10f,0f,0f); 12 10 } 13 11 }
2:已知3D模型的角度求它的向量
已知3D模型target,Y轴旋转30度后向前平移
1 using UnityEngine; 2 using System.Collections; 3 4 public class Test : MonoBehaviour 5 { 6 public Transform target; 7 8 void LateUpdate(){ 9 Quaternion rotation=Quaternion.Euler(0f,30f,0f)*target.rotation; 10 Vector3 newPos=rotation*Vector3.forward; 11 } 12 } 13
3:已知一个目标点,让模型朝着这个目标点移动
比如模型要朝着target移动
1 using UnityEngine; 2 using System.Collections; 3 4 public class Test:MonoBehaviour 5 { 6 public Transform target; 7 public Vector3 vec;
8 void LateUpdate(){
//第一种方法 9 this.transform.LookAt(target.position); 10 this.Translate(Vector3.forward);
//第二种方法
vec=target.transform.position-this.transform.position;//主角与目标的朝向 向量
Quaternion rotation=Quaternion.LookRotation(vec);//LookRotation 此函数作用是生成一个四元数表示的三维朝向,然后可以直接把这个朝向赋给游戏对象来变更其朝向,也可以通过线性插值(Quaternion.Slerp 和 Quaternion.Lerp)来实现游戏对象从当前朝向转到这个新生成的朝向上来
this.transform.rotation=rotation;//将新的朝向 赋值给主角 11 } 12 13 }
关于Quaternion.LookRotation 可以看看这篇文章
4:向量不仅可以进行平移,还可以进行旋转
1 using UnityEngine; 2 using System.Collections; 3 4 public class Test : MonoBehaviour 5 { 6 7 public Transform target; 8 9 void LateUpdate(){ 10 //目标向量位置减去模型自身位置 得到一个新的向量 新的向量的方向是从模型朝向目标的,normallized是规范化向量,把向量格式化到1米,这样计算更精确 11 Vector3 vec=(target.position-this.transform.position).normalized; 12 //新的向量围绕Y轴旋转30度 13 vec=Quaternion.Euler(0f,30f,0f)*vec; 14 } 15 }
5:综合例子
例如我们需要计算主角前面5米内,左右30度这个区域
1 using UnityEngine; 2 using System.Collections; 3 4 public class Test : MonoBehaviour 5 { 6 float distance=5f; 7 8 void Update(){ 9 //得到主角当前的面向角度 10 Quaternion quaternion=this.transform.rotation; 11 //得到当前主角所面向的角度的前面5米处的一点的位置 12 Vector3 vec=this.transform.position+(quaternion*Vector3.forward)*distance; 13 14 //得到主角左旋转30度的朝向 15 Quaternion qua_left=Quaternion.Euler(this.transform.rotation.eulerAngles.x,this.transform.rotation.eulerAngles.y-30f,this.transform.rotation.eulerAngles.z); 16 //得到主角左旋转30度之后所面向的前面5米处的一点的位置 17 Vector3 vec_left=this.transform.postion+(qua_left*Vector3.forward)*distance; 18 19 //得到主角右旋转30度的朝向 20 Quaternion qua_right=Quaternion.Euler(this.transform.rotation.eulerAngles.x,this.transform.rotation.eulerAngles.y+30f,this.transform.rotation.eulerAngles.z); 21 //得到主角右旋转30度之后所面向的前面5米处的一点的位置 22 Vector3 vec_right=this.transform.postion+(qua_right*Vector3.forward)*distance; 23 } 24 }
6:已知三维空间中A,B两个点的坐标,写出在X-Z平面上,两个点之间的距离的函数
其实就是求A,B两个点在XOZ平面上的投影的距离,投影后,Y轴坐标为0,X,Z坐标不变,AB投影的距离九是两个点X坐标差的平方和两个点Z坐标差的平方的和,再开方。