美文网首页
移动到目标点的方法

移动到目标点的方法

作者: bzyzhang | 来源:发表于2017-02-25 21:20 被阅读0次

考虑这样一个需求:敌人出生在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 frame
15 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 frame
25 void Update()
26 {
27 transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);
28 if (Time.time >= endMoveTm)
29 {
30 Debug.Log("到达目标点");
31 }
32 }
33 }
注意:这里的方法只适用于到达固定目标点的匀速运动。

原理:先根据路程和速度,计算出时间。然后根据移动时间,判断是否到达了目标点。

这样的好处,就是可以不用设置到达目标点的标准值了。

相关文章

  • 移动到目标点的方法

    考虑这样一个需求:敌人出生在A点,需要到达B点去攻击主角。 之前,我是这样实现这个需求的(只考虑Z轴的移动): 1...

  • 每天一个Linux 命令 - shell 快捷键

    shell 下快捷键 光标移动命令 Ctrl + a移动到行首 Ctrl + e移动到行尾 Ctrl + f向前移...

  • 重构——处理概括关系

    1 Pull Up Field(字段上移) 和 Pull Up Method(函数上移) 将字段或者函数移动到超类...

  • VI/VIM常用命令

    一、移动 左-下-上-右:h-j-k-l移动到当间单词的开始:b(begin)移动到当前单词的结束:e(end)移...

  • 判断3D空间中, 两点和平面关系

    问题描述: 在3D空间中, 物体从A点朝向目标点C点移动, 下一刻移动到了B点.(这里的朝向是指, 以AC向量和A...

  • TableView、CollectionView回到顶部全解

    方法一 滚动到区域 方法二 设置偏移量 方法三 滚动到指定的cell,无sectionHeader 回到顶部 ta...

  • 已知一点经纬度及与另一点距离和航向,求另一点经纬度

    本文结合Vincenty公式计算椭圆形地球模型目标点的方法 参考资料 http://www.movable-typ...

  • Line Renderer导航路径

    用LineRenderer制作一个导航路径(可以制作成封装方法):target是目标点; nav是NavMeshA...

  • G01讲解

    G01是直线切削:刀具是以程序中设定的F值来进行车削,从某一点出发,直线移动到目标点,即单独运动也可以俩轴同时运动...

  • G01慢速车削

    G01是直线切削:刀具是以程序中设定的F值来进行车削,从某一点出发,直线移动到目标点,即单独运动也可以俩轴同时运动...

网友评论

      本文标题:移动到目标点的方法

      本文链接:https://www.haomeiwen.com/subject/tcpnwttx.html