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

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

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;
} }

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

最新文章

  1. python爬某个网站的图片
  2. 最新的jQuery插件和JavaScript库
  3. label for
  4. java网络编程之TCP通讯
  5. unity3d游戏开发(一)——圈圈叉叉
  6. 【面试】惠普IT电面
  7. (转)Java程序利用main函数中args参数实现参数的传递
  8. Thinking in C++: 第1章 为什么C++会成功(改进了C的缺点,可复用C的知识与库,执行效率相当)
  9. sql server中的索引详情
  10. hibernate 配置文件
  11. Linux 笔记 #03# 在 Debian远程服务器上运行 Java socket程序
  12. UML设计
  13. Mac下写博客工具MarsEdit相关资料
  14. LeetCode(96): 不同的二叉搜索树
  15. Codeforces 739C Alyona and towers 线段树
  16. cached-query 将缓存和查询数据库高速连接起来的轻类库
  17. linux命令学习之:chown
  18. 开发 Swift 和 Objective-C 混编的 Framework
  19. 第一章:AI人工智能 の 数据预处理编程实战 Numpy, Pandas, Matplotlib, Scikit-Learn
  20. ffmpeg的API函数用法 :sws_scale函数的用法-具体应用

热门文章

  1. Windows Server 安装 BitLocker
  2. Redis info参数总结(转)
  3. Accessorizer的使用说明!
  4. aehyok.com的成长之路三——框架结构
  5. Spring MVC+Quartz 定时任务持久化
  6. C# 中 KeyPress 、KeyDown 和KeyPress的详细区别[转]
  7. [算法导论]BFS @ Python
  8. Nginx开发从入门到精通 学习目录分享学习 (阿里著作)
  9. Javascript的一个生产PDF的库: unicode和中文问题的解决
  10. LESS详解之函数(四)