移动到目标点的方法
来源:互联网 发布:麦格米特plc编程手册 编辑:程序博客网 时间:2024/06/04 23:19
考虑这样一个需求:敌人出生在A点,需要到达B点去攻击主角。
之前,我是这样实现这个需求的(只考虑Z轴的移动):
1 using UnityEngine; 2 3 public class Test : MonoBehaviour 4 { 5 /// <summary> 6 /// 目标点 7 /// </summary> 8 Vector3 targetPos; 9 /// <summary>10 /// 移动速度11 /// </summary>12 float moveSpeed = 10f;13 14 // Update is called once per frame15 void Update()16 {17 transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);18 ///这里只考虑在Z轴方向的移动19 if (Mathf.Abs(transform.position.z - targetPos.z) <= 0.2f)20 {21 Debug.Log("到达目标点");22 }23 }24 }
这里有个问题,就是判断是否到达目标点的距离值不好确定,这里设置的是0.2f。这个值应该小于一帧的移动距离(即这里的moveSpeed * Time.deltaTime)。但是呢,这里的 Time.deltaTime不是一个固定的值,在不同的机器上可能值都不同。距离值设置的过小的话,如果小于一帧的移动距离,那么就会一直移动,检测不到到达目标点;如果设置的过大的话,假如速度也很大,那么最后与目标点的差距也会非常大。
改进一下,使用如下的方法实现:
1 using UnityEngine; 2 3 public class Test : MonoBehaviour 4 { 5 /// <summary> 6 /// 目标点 7 /// </summary> 8 Vector3 targetPos; 9 /// <summary>10 /// 移动速度11 /// </summary>12 float moveSpeed = 10f;13 /// <summary>14 /// 结束移动的时间15 /// </summary>16 float endMoveTm;17 18 void Start()19 {20 float moveTm = Mathf.Abs(transform.position.z - targetPos.z) / moveSpeed;21 endMoveTm = moveTm + Time.time;22 }23 24 // Update is called once per frame25 void Update()26 {27 transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);28 if (Time.time >= endMoveTm)29 {30 Debug.Log("到达目标点");31 }32 }33 }
注意:这里的方法只适用于到达固定目标点的匀速运动。
原理:先根据路程和速度,计算出时间。然后根据移动时间,判断是否到达了目标点。
这样的好处,就是可以不用设置到达目标点的标准值了。
0 0
- 移动到目标点的方法
- Unity3D里实现物体移动到目标点,并且摄像机跟着移动的简单方案
- Unity3D里实现物体移动到目标点,并且摄像机跟着移动的简单方案
- Unity3D里实现物体移动到目标点,并且摄像机跟着移动的简单方案
- Unity3d 序列目标点的移动
- 使用 Selenium 将滚动条移动到目标元素位置的方法
- SDUT 2139-从起始点到目标点的最短步数
- 将upload上传文件的临时文件,移动到目标位置
- 图练习-BFS-从起点到目标点的最短步数
- //实现思路:鼠标点击,产生目标点,计算角色和目标点的夹角,旋转角色朝向目标点,然后移动角色。
- SDUT OJ 2138 BFS 判断可达性 2139 BFS 从起始点到目标点的最短步数
- 图结构练习——BFS——从起始点到目标点的最短步数
- 图结构练习——BFS——从起始点到目标点的最短步数
- 图结构练习——BFS——从起始点到目标点的最短步数
- 图结构练习——BFS——从起始点到目标点的最短步数
- 图结构练习——BFS——从起始点到目标点的最短步数
- 图结构练习——BFS——从起始点到目标点的最短步数
- 图结构练习——BFS——从起始点到目标点的最短步数
- 算法训练 奇偶判断
- Add two numbers
- FLV学习(八)FlvParser源码阅读(6)解析音频标签
- 尺度不变特征变换匹配算法详解
- 算法训练 字符串逆序
- 移动到目标点的方法
- 求素数
- 算法提高 6-17复数四则运算
- ubuntu安装搜狗输入法
- 121. Best Time to Buy and Sell Stock
- Validate Binary Search Tree
- 2017面试题收集
- 算法训练 完数
- 【OpenCV入门教程之一】 OpenCV 2.4.8 +VS2010的开发环境配置