在游戏设计中经常会遇到检测距离的情况,一般这种情况下需要每帧来检测距离是否小于某值,如果小于则触发某一逻辑,但是问题是如果刚好距离在临界区附近跳动时,就会产生频繁触发事件的问题,为了解决这个问题,可以使用双阈值法。

双阈值法是说,有2个阈值可以在两个方向上分别做判断,当a向b趋近时使用一个阈值,而b向a趋近时则使用另外一个阈值,两个阈值之间有一定的容忍值,这样可以解决临界值跳动的问题。

下面是一个每帧调用的函数Update_Range(),是用来判断玩家和npc(girl)之间的举例的,首先用移动速度来判断谁向谁趋近,然后使用不同的阈值判断是否进入某一距离。

    void Update_Range(){float playerSpeed = Vector3.Distance(playerHeadLastPos, playerHead.position);float girlSpeed = Vector3.Distance(girlHeadLastPos, girlHead.position);//Debug.Log((playerSpeed - girlSpeed) > 0 ? "player faster, speed:"+playerSpeed:"girl faster speed:"+ girlSpeed);bool girlWalkToPlayer = true;if (playerSpeed > girlSpeed)girlWalkToPlayer = false;float range = Vector3.Distance(playerHead.position, girlHead.position);//Debug.Log("range:" + range);if (girlWalkToPlayer){if (range < closeRange){Enter_CloseRange();Update_Walkback();enterMediumRange = false;enterFarRange = false;}else if (range >= closeRange && range < mediumRange){Enter_MediumRange();enterCloseRange = false;enterFarRange = false;}else if (range >= mediumRange && range < farRange){Enter_FarRange();enterCloseRange = false;enterMediumRange = false;Update_Follow();}else { }}else{float tolerance = 0.1f;if (range < closeRange - tolerance){Enter_CloseRange();Update_Walkback();enterMediumRange = false;enterFarRange = false;}else if (range >= closeRange- tolerance && range < mediumRange- tolerance){Enter_MediumRange();enterCloseRange = false;enterFarRange = false;}else if (range >= mediumRange- tolerance && range < farRange- tolerance){Enter_FarRange();enterCloseRange = false;enterMediumRange = false;Update_Follow();}else { }}

Unity3d 双阈值解决临界值跳跃的问题相关推荐

  1. 双阈值检测阈值选择_通过阈值进行计算机视觉高级车道检测

    双阈值检测阈值选择 In my earlier post, I talked about finding lane lines using Edge Detection and Hough Trans ...

  2. Delphi 使用双缓冲解决图片切换时的闪烁问题 good

    Delphi 使用双缓冲解决图片切换时的闪烁问题 good 参考文章: (1)Delphi 使用双缓冲解决图片切换时的闪烁问题 good (2)https://www.cnblogs.com/find ...

  3. 阈值和阀值的区别_基于双阈值设定的图像识别产品策略

    百度EasyEdge端计算模型生成平台产品调研一文里提出了一种"端+云"的识别方案,当本地的识别得分远超设置阈值时,可以默认识别通过:其他时候,可以结合云端结果做综合判断是否为同人 ...

  4. java 坦克重叠_【Java】我所知道坦克大战(单机版)之画出坦克的实心圆、让圆动起来、双缓冲解决闪烁问题...

    28640发布于 今天 02:47 本篇文章目的 画出坦克的实心圆 让坦克圆动起来 双缓冲解决闪烁问题 一.画出代表坦克的实心圆 我们需要画出一个圆,那么可以使用fillOval方法 fillOval ...

  5. 基于OTSU算法和基本粒子群优化算法的双阈值图像分割

    OTSU自适应阈值求法与粒子群算法的合作,将OTSU算法作为粒子群算法的适应值函数,来计算每个粒子的适应度与最优阈值相比较,经过3000次迭代最后取得优化后的阈值 原图: 经过联合算法优化的双阈值为9 ...

  6. matlab基于遗传算法的最大熵值法的双阈值图像分割

    利用最佳直方图熵法(KSW熵法)及传统遗传算法实现灰度图像二阈值分割 matlab代码如下: 1.main.m(主函数): %%%利用最佳直方图熵法(KSW熵法)及传统遗传算法实现灰度图像二阈值分割 ...

  7. win10和ubuntu18.04双系统解决罗技k380用一个频道无缝连接

    win10和ubuntu18.04双系统解决罗技k380用一个频道无缝连接 ubuntu18.04中设置 win10系统下设置 不知道你是因为什么采用了linux和win10双系统,但是如果你恰好也有 ...

  8. python实现Otsu双阈值算法

    最近在做双阈值的对比实验需要用到Otsu,发现网上没有python的实现,所以写下来记录一下. Otsu双阈值算法的思想与单阈值的思想类似,单阈值的思想为: g = w0(u0-u)^2+w1(u1- ...

  9. 猎魂觉醒显示无法连接战斗服务器,猎魂觉醒无法连接服务器怎么办 双端解决方法分享...

    猎魂觉醒无法连接服务器怎么办 双端解决方法分享,了解到有部分玩家无法连接到<猎魂觉醒>游戏服务器的情况,在此温馨提示解决办法: 1.ios用户: 国行版本的iPhone及可插sim卡的iP ...

  10. 猎魂觉醒显示无法连接战斗服务器,《猎魂觉醒》无法连接服务器怎么办 双端解决方法分享...

    导 读 <猎魂觉醒>无法连接服务器怎么办 双端解决方法分享!猎魂觉醒无法连接服务器怎么办 双端解决方法分享,了解到有部分玩家无法连接到<猎魂觉醒>游戏服务器的情况,在此温馨提示 ...

最新文章

  1. 富士通台式电脑_英特尔X86架构霸权终将崩塌,ARM架构才是未来PC电脑市场的王者?...
  2. python基础语法手册format-python基础知识之格式化
  3. Python判断 子集
  4. Android 置Activity全屏和无标题
  5. 洛谷 P2689 东南西北【模拟/搜索】
  6. html页面怎么添加打印,在网页中添加打印按钮或链接的方法
  7. 漫谈 Gentoo 中文社区的建设
  8. 鼠年最后一场干货直播:构建极致性能、易于扩展、坚如磐石的数据库
  9. 程序员如何年薪百万?深度学习必读书籍!
  10. 同步异步和阻塞非阻塞
  11. flex AdvancedDataGrid 高级表格 介绍 教程
  12. python中stacked_栈式自动编码器(Stacked AutoEncoder)
  13. 第三十四期:游戏开发中常见的10种编程语言
  14. 《漫画算法2》2021全新进阶版来袭!
  15. Verilog语法误区总结
  16. 2021/06/20 1+X 大数据应用开发(Java)中级实操考试
  17. 如何做思维导图?用这两个软件就可以了
  18. 幽默笑话大全 API 接口
  19. “多事之秋”的趣店,如今还好吗?
  20. 完美的支持Retina MACBOOK的股票软件-富图牛牛

热门文章

  1. SpringBoot实现发送电子邮件
  2. 任务管理器已被系统管理员停用的解决方法
  3. 谷歌工程师深度技术分析“为什么ios比android流畅
  4. IDE SATA SCSI iSCSI等存储硬盘对比与分析
  5. Suspending MMON slave action kewrmapsa_ for 82800 seconds
  6. LibreOJ - 10015 扩散
  7. linux中命令tat,文件管理类命令(ls,tat,glob,cp,touch等)
  8. 数字电路低电平有效逻辑和符号的理解
  9. 第一次结对编程作业——需求分析与原型设计
  10. Android Behavior之ViewPager+Fragment+RecyclerView实现吸顶效果