这里主要讲三个函数 , 一个自动跟随函数 和 两个指向旋转函数 , 这三个函数在游戏角色创建过程中会经常用到:

这个是跟随函数 和 欧拉角旋转函数

public class GensuiZhixiang : MonoBehaviour {

    //公共属性
//定义跟随主体的Transform
Transform m_transform;
//定义被跟随(指向)物体的Transform
public Transform target; //跟随类
//定义跟随主体的移动速度
float m_speed = 10f; //指向类
//定义跟随主体的转向角度
float m_rotSpeed = 120f; // Use this for initialization
void Start ()
{
//获取自身Transform
m_transform = this.transform;
} // Update is called once per frame
void Update ()
{
//调用跟随函数
Follow(); //调用指向函数
LookAt(); } //跟随函数
void Follow()
{
//定义跟随主体原来的位置(还没有跟随移动)
Vector3 oldPosition = m_transform.position; //定义被跟随物体的的位置
Vector3 targetPosition = target.position; //得到XYZ轴上的向量
float x = Mathf.MoveTowards(oldPosition.x, targetPosition.x, m_speed * Time.deltaTime);
float y = Mathf.MoveTowards(oldPosition.y, targetPosition.y, m_speed * Time.deltaTime);
float z = Mathf.MoveTowards(oldPosition.z, targetPosition.z, m_speed * Time.deltaTime); //把得到的向量赋给跟随主体 实现跟随
m_transform.position = new Vector3(x,y,z); } //指向函数
void LookAt()
{
//定义指向主体原来的角度(还没有旋转)
Vector3 oldOEuler = m_transform.eulerAngles; //指向主体坐标 转向 被指向物体
m_transform.LookAt(target.transform); //得到面向物体的欧拉角(只需要XY就能实现指向了)
float eulerX = Mathf.MoveTowardsAngle(oldOEuler.x, m_transform.eulerAngles.x, m_rotSpeed * Time.deltaTime);
float eulerY = Mathf.MoveTowardsAngle(oldOEuler.y, m_transform.eulerAngles.y, m_rotSpeed * Time.deltaTime); //把得到的旋转量赋给主体 实现指向
m_transform.eulerAngles = new Vector3(eulerX, eulerY, 0);
} }

这个是 四元数旋转函数

public class QuaternionLookat : MonoBehaviour {

    //定义被指向主体的Transform
Transform m_transform; //定义被指向物体的Transform
public Transform target; // Use this for initialization
void Start ()
{
//初始化给主体赋Transform
m_transform = this.transform;
} // Update is called once per frame
void Update ()
{
//调用旋转函数
QuaterLook();
} //四元数旋转函数
void QuaterLook()
{
//定义一个三维变量 用来表示从本体 到 客体的向量
Vector3 pos = target.position - m_transform.position; //用四元数的LookRotation() 获得转向的四元数
Quaternion m_rotation = Quaternion.LookRotation(pos); //把得到的旋转量 赋给旋转本体 实现指向旋转 (注意这里的.localRotation 而不是.rotation 因为前者能实现旋转 后者不行)
m_transform.localRotation = m_rotation;
} }

欧拉角旋转函数 和 四元数旋转函数 都能实现实时指向旋转  但是四元数的效果更好  细节也更细腻

Unity 3D 中自动寻路 和 跟随转向 探析的更多相关文章

  1. 在Unity 3D中加入Image图片

    在Unity 3D中加入Image图片,我在刚开始是加不进去的,为什么呢?因为没有图片,图如下: 原因就是我们没有把图片设置为Script,图片的格式还是默认的那个,这只能作为贴图使用.我们将图片进行 ...

  2. Unity 3D中的阴影设置

    在Unity 3D中,经常需要用到光照阴影,即Directional Light的Shadow,Shadow分为Hard Shadow和Soft Shadow.区别是Soft Shadow的阴影边缘比 ...

  3. Unity 3D中不得不说的yield协程与消息传递

    1. 协程 在Unity 3D中,我们刚开始写脚本的时候肯定会遇到类似下面这样的需求:每隔3秒发射一个烟花.怪物死亡后20秒再复活之类的.刚开始的时候喜欢把这些东西都塞到Update里面去,就像下面这 ...

  4. Unity 3d中Shader是什么,可以吃吗?

    众所周知,Unity3d是一款跨平台非常广的游戏引擎,上手容易,界面友好,集成功能众多,是目前开发手游的主流引擎.本人有幸使用Unity 3d进行开发已一年多时间,已领略了这歀引擎的强大之处. 编写s ...

  5. Unity 3D中的内存管理

    本文欢迎转载,但烦请保留此行出处信息:http://www.onevcat.com/2012/11/memory-in-unity3d/ Unity3D在内存占用上一直被人诟病,特别是对于面向移动设备 ...

  6. Unity 3D中的菜单项

    1.File菜单:主要是包含项目和场景的创建.保存以及输出等功能.2.Edit(编辑)菜单:只要包括对场景进行一系列的编辑以及环境设置操作等命令.3.Assets(资源)菜单:掌握资源在Unity中的 ...

  7. Unity 3D中ToLua-UGUI使用说明、导入Unity流程、制作登陆界面

    ToLua制作登录界面 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 请支持大神开发者:骏擎CP,蒙哥等奔 ...

  8. 3D max模型导入unity 3D中注意事项

    一.单位,比例统一   在建模型前先设置好单位,在同一场景中会用到的模型的单位设置必须一样,模型与模型之间的比例要正确,和程序的导入单位一致,即便到程序需要缩放也可以统一调整缩放比例.统一单位为米. ...

  9. Unity 3D中C#的性能优化小陷阱

    本篇内容主要来自Unity官方手册: 一般性能优化 一些地方为本人瞎编杜撰,请酌情参考.如有错误,欢迎指出. Unity里C#编程虽然既简单还很爽,但是性能小陷阱还不少.我总强迫自己让代码最优,因此很 ...

随机推荐

  1. PHP中常用的正则表达式由哪些元素构成?

    在程序开发中,我们常常要用到正则表达式,对于新手来说,很多时候知道正则表达式是怎么回事,但当真正需要使用的时候,却不知该用什么函数,具体的修饰符也比较混乱.下面小编就为大家整理了一些php正则表达式中 ...

  2. Oracle Redo Log 机制 小结(转载)

    Oracle 的Redo 机制DB的一个重要机制,理解这个机制对DBA来说也是非常重要,之前的Blog里也林林散散的写了一些,前些日子看老白日记里也有说明,所以结合老白日记里的内容,对oracle 的 ...

  3. 使用Installutil安装系统服务方法

    系统必须装有.net Framework2.0然后点击开始-运行输入以下指令即可完成相应操作安装服务:C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/Ins ...

  4. IE6-IE11兼容性问题列表及解决办法总结

    相比IE6-IE9那版,主要添加IE10和IE11的新变化. 以下是目录及下载链接: 目录 概述 2 第一章:HTML 3 第一节:IE7-IE8更新 3 1. 如果缺少结束标记的 P 元素后跟 TA ...

  5. mysql-5.7.15-winx64免安装版配置

    1.拷到硬盘根目录下; 2.在 bin 平行目录下新建  data 文件夹: 3. 修改  my-default.ini 文件,添加 basedir = C:\mysql-5.7.15-winx64d ...

  6. ELK——安装 logstash 2.2.0、elasticsearch 2.2.0 和 Kibana 3.0

    本文内容 Elasticsearch logstash Kibana 参考资料 本文介绍安装 logstash 2.2.0 和 elasticsearch 2.2.0,操作系统环境版本是 CentOS ...

  7. ubuntu(Mint-17)修改dns

    国内默认dns常被劫持,所以需要修改: $ sudo vi /etc/network/interfaces 在下面添加一行: dns-nameservers 8.8.8.8 8.8.4.4 然后,网上 ...

  8. FEC难:

     飞雨(314698641)  12:03:16 有人研究fec吗把信源编码好信道编码区别开来 ? 杭州桓泽(84894922)  12:52:54fec实际是一种概括性技术可以从信源的方面做fec就 ...

  9. 数据仓库专题(23):总线矩阵的另类应用-Drill Down into a More Detailed Bus Matrix

    一.前言 Many of you are already familiar with the data warehouse bus architecture and matrix given thei ...

  10. 刨根问底U3D---从Profile中窥探Unity的内存管理

    这篇文章包含哪些内容 这篇文章从Unity的Profile组件入手,来探讨一下Unity在开发环境和正式环境中的内存使用发面的一些区别, 并且给出了最好控制内存的方法(我想你已经知道了...Prefa ...