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坐标差的平方的和,再开方。

 链接 http://tech.ddvip.com/2013-02/1359998787190119.html

posted @ 2014-06-11 23:35  江湖还在,人已不堪  阅读(1472)  评论(1编辑  收藏  举报