zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    LeetCode Flatten Binary Tree to Linked List
    LeetCode Longest Common Prefix
    LeetCode Trapping Rain Water
    LeetCode Add Binary
    LeetCode Subsets
    LeetCode Palindrome Number
    LeetCode Count and Say
    LeetCode Valid Parentheses
    LeetCode Length of Last Word
    LeetCode Minimum Depth of Binary Tree
  • 原文地址:https://www.cnblogs.com/He-Jing/p/3783061.html
Copyright © 2011-2022 走看看