1.确定路程长度,得获得 2个坐标点,起点 和 终点。

float f = Vector3.Distance(a,b);

2.对累计走过得长度进行累加

float distance += f;

这个条件得在什么情况下,计算累计行走得长度?

当角色开始移动,移动得速度从0-1得时候,到达目的地 才进行累加。

player_go.transform.GetComponent<NavMeshAgent>().path.corners

是NavMeshAgent组件累计行走得时候 把所有得路径得点得坐标放入其中。

获得NavMeshAgent导航坐标Vector3数组

player_go.transform.GetComponent<NavMeshAgent>().path.corners;

这三者的值 都是 相同的。

player_go.transform.position;//玩家控制的角色的世界坐标点
player_go.transform.GetComponent<NavMeshAgent>().nextPosition;//
player_go.transform.GetComponent<NavMeshAgent>().path.corners[0];
...
using UnityEngine.AI;
class...
{
...private NavMeshAgent agent;private float walkDistance =0;//总共行走得距离private float distance = 0;//两点之间 暂时得距离public Vector3[] vector3s;//player_go.transform.GetComponent<NavMeshAgent>().path.corners用于观察这个数组是如何运行得int cornersLength = 0;//长度private int isReachDestination = 0;//private float speedPercent = 0;//角色 得移动速度private  Vector3 nextPos;public List<Vector3> list_distance = new List<Vector3>();//using System.Collections.Generic;
...start(){...agent = GetComponent<NavMeshAgent>();walkDistance = 0;...}//start()...update(){...vector3s = agent.path.corners;cornersLength = vector3s.Length;if (player_go != null&& player_go.transform.GetComponent<NavMeshAgent>() != null){agent = player_go.transform.GetComponent<NavMeshAgent>();speedPercent = agent.velocity.magnitude / agent.speed;//在Update函数里面进行调用}//...nextPos = agent.nextPosition;//角色当前的及时坐标if (speedPercent == 0&& Input.GetMouseButtonDown(0))//当角色的速度为0,鼠标点击左键的时候{list_distance.Add(nextPos);//行走路径数组 添加起始出发点 坐标}if (cornersLength >= 2)//当NavMeshAgent导航路径点数组,开始导航,角色开始移动{Debug.Log("======================>>>>>>>");distance = Vector3.Distance(agent.path.corners[1],//判断角色的下一个 途中 路径点的坐标 agent.path.corners[0]);//判断 角色当前的坐标//distance的差值 可以随时调整,误差值过大会影响效果Debug.Log("======================>>>>>>>"+ distance);if (distance < 1.8f)//角色移动已经到达 其中的路径点的坐标list_distance.Add(agent.path.corners[0]);//行走路径数组 路径点 坐标}...}//update()...
}//class

通过update函数里面vector3s = player_go.transform.GetComponent<NavMeshAgent>().path.corners;

来观测 这个corners是如何工作的,当角色 使用NavMeshAgent 进行导航,目的地坐标有多个 拐点的时候,vector3s[0]和vector3s[1]

player_go.transform.GetComponent<NavMeshAgent>().path.corners[0]

和player_go.transform.GetComponent<NavMeshAgent>().nextPosition永远是当前角色的坐标。transform.position

当鼠标点击一次的时候,获得 移动路径点的数组

判断nextpos是否与 已经获得的 移动路径点的数组 中的某个 路径点坐标 相同,如果相同 就 把上一个 路径点的坐标与nextpos的距离 进行判断。

判断当前角色的及时 世界坐标与 路径点数组 中的 下一个路径点的 坐标 是否 接近,

如果是,就把 下一个路径点的 坐标 放入 走过的 所有 坐标数组List<Vector3>list_distance 中。

获得 总共行走的 路程 遍历 数组list_distance中的 坐标点,并且用Vector3.Distance(pos1,pos0);进行计算即可。

...if (speedPercent == 0&& Input.GetMouseButtonDown(0))//当角色的速度为0,鼠标点击左键的时候{list_distance.Add(nextPos);//行走路径数组 添加起始出发点 坐标}if (cornersLength >= 2)//当NavMeshAgent导航路径点数组,开始导航,角色开始移动{//Debug.Log("======================>>>>>>>");distance = Vector3.Distance(agent.path.corners[1],//判断角色的下一个 途中 路径点的坐标 agent.path.corners[0]);//判断 角色当前的坐标//distance的差值 可以随时调整,误差值过大会影响效果//Debug.Log("======================>>>>>>>"+ distance);if (distance < 1.8f)//角色移动已经到达 其中的路径点的坐标{index++;list_distance.Add(agent.path.corners[1]);//行走路径数组 路径点 坐标walkDistance = walkDistance + distance;Debug.Log("          ========== distance: " + distance+"///"+ walkDistance);}}
...

相关资料:

1.[Unity]NavMeshAgent自动寻路判断到达目的地

2.

参考资料:

1.unity 两点之间的距离

2.NavMeshPath.corners

3.

[Unity][NavMeshAgent]怎么计算角色走过的路程长度相关推荐

  1. Unity实现第三人称角色转向摄像机朝向的方向

    Unity实现第三人称角色转向摄像机朝向的方向 以黑魂为例,每次按下向前移动的控制键,人物会转向摄像机朝向的方向 void TurnTo(Vector3 direction)//形参填入需要朝向的方向 ...

  2. Unity FPS帧率计算

    Unity FPS帧率计算 原理 FPS 是一段时间内的平均值.平均 FPS = 帧数 / 一段时长.帧数可以用每次进入 Update 时加一的变量来统计.一段时长就是进入 Update 时 Time ...

  3. C语言试题五之计算并输出给定数组(长度为9)中每相邻两个元素之平均值的平方根之和

    1.题目 请编写函数function,它的功能是:计算并输出给定数组(长度为9)中每相邻两个元素之平均值的平方根之和 例子:若我们main函数给出double a[9] = {1, 2, 3, 4, ...

  4. 用python写一段计算autocad多段线长度的代码

    答:# 请在下面输入代码.import math#获取多段线的点坐标 points = [(1,1), (2,1), (2,2), (3,2)]#计算多段线的长度 length = 0 for i i ...

  5. 下载FATSQ,读取10条序列并计算每条序列的长度和GC含量

    FASTQ 这是目前存储测序数据最普遍.最公认的一个数据格式,另一个是uBam格式,但这篇文章中不打算对其进行介绍.上面所讲的FASTA文件,它所存的都是已经排列好的序列(如参考序列),FASTQ存的 ...

  6. ArcGIS计算面状河流的长度(河流中心线)

    01  需求说明 对于线状河流计算长度我们利用ArcGIS的计算几何可以轻松得到. 那如果是面状河流的话,那他的长度该如何求算?如下图. 简单的逻辑就是获取面状河流的中心线.如图 那今天我们就给大家介 ...

  7. 计算FLT_MAX的整数位长度

    传统方法 先把 float 型转成 int 型,但是由于 float 是 4个字节,某些数值超出了 int 的范围,所以在计算位数时,先将数字多次 / 10000 或者任意10的倍数,降低数的量级,再 ...

  8. 使用Python计算fasta文件的序列长度

    使用Python计算fasta文件的序列长度 在这里插入代码片使用Python计算fasta文件的序列长度 #!/usr/bin/python #-- coding:utf-8 -- import s ...

  9. Unity NavMeshAgent参数及API

    前言:Unity版本为2019.2.9f1 Ppersonal.Unity版本可在上方Help下点击About Unity找到.本文将采用官方文档的英文并对比介绍.由于个人英文和开发水平有限,翻译或解 ...

最新文章

  1. LeetCode:917. Reverse Only Letters
  2. jvm可以运行多种语言吗
  3. Maven修改远程仓库配置
  4. LeetCode 266. 回文排列(计数)
  5. 我面试几乎必问:你设计索引的原则是什么?怎么避免索引失效?
  6. java pcm16位_Java – 将16位带符号的pcm音频数据数组转换为双数组
  7. c语言读取txt第二行数值,c语言读取文件的第二行
  8. 2021年软考网络工程师备考资料
  9. 除了输入法,移动端AI还有哪些想象空间?
  10. 西南科技大学OJ题 单链表中信息的分类1039
  11. R导入excel数据
  12. julia 编程语言_Julia(Julia)编程语言入门
  13. excel函数去重_Excel去除重复值方法汇总
  14. Blue Coat 庖丁解牛 云安全势在必行
  15. 小白求职准备,一些资料汇总,持续更新(工科转Java开发方向)
  16. rm -rf 删除文件 恢复
  17. Git学习笔记之三:Git 工作区、暂存区和版本库
  18. JAVA父类强转子类
  19. Error: Corrupted zip: missing XXX bytes.
  20. 前端第一阶段-11(HTML之flex弹性)

热门文章

  1. oss2罗列所有文件
  2. 2020年技术研发岗薪酬排名
  3. 【成员故事】CSDN杨东杰:生态运营需要一个自己的圈子
  4. html怎样给文字设置底纹,使用HTML和CSS来实现为文字设置图片底纹
  5. DDS的理解及IP核的使用
  6. CSS 添加背景图片
  7. 齐二TK6916/20/26/32系列数控落地铣镗床简介3
  8. 四川南溪仙源长江公路大桥通车 结束千年摆渡过江历史
  9. 5G NR LDPC码(2)—— 5G NR中的LDPC码标准化内容
  10. 科技新品 | 索尼可换镜头Vlog相机;LG电子全球首款卷曲屏电视;卡西欧《吃豆人》合作款数码手表...