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

  • 相关阅读:
    BZOJ 3295 【CQOI2011】 动态逆序对
    POJ 3714 Raid
    树状数组区间修改加区间查询
    codevs 2606 约数和问题
    UOJ #150 【NOIP2015】 运输计划
    分享知识-快乐自己:IDEA 导入(web)项目并部署到 Tomcat
    分享知识-快乐自己:配置(各种)环境变量
    分享知识-快乐自己:什么是MVC
    分享知识-快乐自己:SpringBoot 使用注解API的方式定义启动端口号
    分享知识-快乐自己:Oracle中定义及使用同义词
  • 原文地址:https://www.cnblogs.com/He-Jing/p/3783061.html
Copyright © 2011-2022 走看看