Unity 3D 中自动寻路 和 跟随转向 探析
2024-10-18 06:50:03
这里主要讲三个函数 , 一个自动跟随函数 和 两个指向旋转函数 , 这三个函数在游戏角色创建过程中会经常用到:
这个是跟随函数 和 欧拉角旋转函数
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;
} }
欧拉角旋转函数 和 四元数旋转函数 都能实现实时指向旋转 但是四元数的效果更好 细节也更细腻
最新文章
- python爬某个网站的图片
- 最新的jQuery插件和JavaScript库
- label for
- java网络编程之TCP通讯
- unity3d游戏开发(一)——圈圈叉叉
- 【面试】惠普IT电面
- (转)Java程序利用main函数中args参数实现参数的传递
- Thinking in C++: 第1章 为什么C++会成功(改进了C的缺点,可复用C的知识与库,执行效率相当)
- sql server中的索引详情
- hibernate 配置文件
- Linux 笔记 #03# 在 Debian远程服务器上运行 Java socket程序
- UML设计
- Mac下写博客工具MarsEdit相关资料
- LeetCode(96): 不同的二叉搜索树
- Codeforces 739C Alyona and towers 线段树
- cached-query 将缓存和查询数据库高速连接起来的轻类库
- linux命令学习之:chown
- 开发 Swift 和 Objective-C 混编的 Framework
- 第一章:AI人工智能 の 数据预处理编程实战 Numpy, Pandas, Matplotlib, Scikit-Learn
- ffmpeg的API函数用法 :sws_scale函数的用法-具体应用
热门文章
- Windows Server 安装 BitLocker
- Redis info参数总结(转)
- Accessorizer的使用说明!
- aehyok.com的成长之路三——框架结构
- Spring MVC+Quartz 定时任务持久化
- C# 中 KeyPress 、KeyDown 和KeyPress的详细区别[转]
- [算法导论]BFS @ Python
- Nginx开发从入门到精通 学习目录分享学习 (阿里著作)
- Javascript的一个生产PDF的库: unicode和中文问题的解决
- LESS详解之函数(四)