功能:

计算角色/怪物走到目标,如果有墙就再墙前停止,防止一直怼墙走现象。

思路:

1. θ角 = 入射线(self - target) 与 法线(raycastHit.normal) 的夹角度(V3.angle)

2. 距墙停止距离 = 自身半径R / cosθ角

3. |应走向量| = 走到墙前向量.长度(magnitude) -  距墙停止距离

4. 应走向量 = 到墙向量.单位向量 *  |应走向量|

限制:

①不能是斜着的墙或人

②地形是平面

③不能太小的阻挡物,太细的夹角需要增加一次计算

实验截图:

橙色圆柱是角色,绿色是要走到的目标位置,计算结果是灰色圆柱

   

    

上码:

public class test : MonoBehaviour
{public GameObject Self;public GameObject Fake;public GameObject Target;public float width;public float rayAngle;public float rayDirectValue;public float realGetLenght;public Vector3 rayVector;public Vector3 realGetVector;public float offerAngle;public float offerSin;public float offerCos;public float offerXValue;public float offerZValue;void Start(){width = Self.GetComponent<CapsuleCollider>().radius * Self.transform.localScale.x;}void Update(){Vector3 wantPos = Target.transform.position;Vector3 realGetPos = Vector3.zero;RaycastHit raycastHit = new RaycastHit();Ray wallCheck = new Ray(Self.transform.position, Target.transform.position - Self.transform.position);if (Physics.Raycast(wallCheck, out raycastHit, Vector3.Distance(Target.transform.position, Self.transform.position) + 8, 1 << LayerMask.NameToLayer("Ground"))){rayAngle = Vector3.Angle(Self.transform.position - Target.transform.position, raycastHit.normal);rayDirectValue = width / Mathf.Cos(Mathf.PI / 180 * rayAngle);rayVector = raycastHit.point - Self.transform.position;realGetLenght = rayVector.magnitude - rayDirectValue;           realGetVector = rayVector.normalized * realGetLenght;realGetPos = new Vector3(Self.transform.position.x + realGetVector.x,Self.transform.position.y,Self.transform.position.z + realGetVector.z);}elserealGetPos = wantPos;Fake.transform.position = realGetPos;Debug.DrawLine(Self.transform.position, wantPos, Color.red);Debug.DrawLine(Self.transform.position, realGetPos, Color.blue);}
}

Unity3D射线检测墙面前停止移动相关推荐

  1. Unity3d 射线检测

    射线碰撞单个物体: 方式1:从摄像机向世界发射一条射线,通常用于检测鼠标指针有没有选择物体 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosi ...

  2. 行业分析-全球与中国3D自动X射线检测(AXI)市场现状及未来发展趋势

    根据QYR(恒州博智)的统计及预测,2021年全球3D自动X射线检测(AXI)市场销售额达到了 亿美元,预计2028年将达到 亿美元,年复合增长率(CAGR)为 %(2022-2028).地区层面来看 ...

  3. 11.Unity2D 横版 简单AI 之背后受击转身+寻路跟随敌人+模块化+射线检测

    总目录https://blog.csdn.net/qq_54263076/category_11900070.html?spm=1001.2014.3001.5482 1.敌人背后受击转身+背部攻击伤 ...

  4. 10.Unity2D 横版 简单AI 之 敌人随机移动+自动巡逻+障碍物跳跃+悬崖处转身+射线检测

    总目录 9.Unity2D 简单AI 之 敌人跳跃条件优化+自动范围内检测敌人发起攻击(索敌)+对象池优化+主角受伤死亡_ζั͡ ั͡雾 ั͡狼 ั͡✾的博客-CSDN博客Unity2D 简单AI 之 ...

  5. 射线检测算法在游戏中应用

    笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D ...

  6. Unity 2019 射线检测失效

    之前在做毕设的一个FPS游戏时,遇到了使用射线检测失效的情况,特此记录以下. 前因 在FPS游戏中,对于子弹的发射主要通过两种方式来实现. 一种可以通过实例化子弹的GameObject对其施加物理效果 ...

  7. UE4 手电筒射线检测

    UE4 手电筒射线检测 功能物品:手电筒射线 功能描述:用于对NPC造成伤害或者有其他交互左右的物品 实现方法:每隔0.2秒发射几百根射线用于检测. 首先在摄像头上绑定一个SpotLight,初始设置 ...

  8. Unity3D 鼠标检测世界中的游戏对象

    今天向大家介绍一下,如何初步的用Unity3D从摄像机到鼠标的射线,也就是鼠标检测到Unity3D世界中的游戏对象! 如何才能使射线检测到游戏对象呢,只有一个条件,那就是必须添加collider组件, ...

  9. 直播笔记 | Unity中射线检测详解

    本文首发于洪流学堂微信公众号. 洪流学堂,学Unity快人几步 你好,我是郑洪智,你的技术探路者. 这周三我们直播剖析了Unity中射线检测的功能,以下是直播内容精华部分笔记. 完整录播:https: ...

最新文章

  1. python excel 追加写入_python excel写入及追加写入
  2. C# 4.0 新特性之并行运算(Parallel)
  3. 区域经济、地理信息、互联网三者交叉之行业背景分析
  4. 安卓界面之Viewpager和Tablayout实现滑动界面
  5. python socket编程:实现redirect函数、cookie和session
  6. test.php.bak,MongoDB热备份工具:解决官方版备份缺陷
  7. html中text函数,text函数的使用方法
  8. 迭代器 iterator
  9. jupyter-notebook设置⽀持远程访问
  10. SSH三大框架的工作原理及流程
  11. 在Linux上下载arduino
  12. 用来进行虚拟仿真实验的软件有哪些?这3款简单易懂的软件值得你拥有
  13. 程序猿周末副职业_早上,晚上和周末:我如何改变职业并成为程序员
  14. 解决微信调整字体大小导致页面样式混乱的问题
  15. josn转bln的方法
  16. FPGA课设实验二:计数器设计与仿真
  17. 【网络编程实践】2.4.2 muduo库安装与 procmon 编译
  18. Ebay API item_get - 获得EBAY商品详情
  19. python的擅长领域
  20. 数学英语不好能学php吗,英语和数学基础不好,还能学好编程吗?

热门文章

  1. 俄罗斯黑产界淘宝运营人被美国抓捕,靠收租进账千万美元
  2. 初识动态规划(一)简单入门动态规划与上手操作
  3. 普通人创业,不开实体店或者网上店铺,你能干啥?
  4. Android 4高级编程(第3版)》
  5. 程序化模型失效是策略模型的必然结局吗?
  6. 【5G/4G】NAS与AS层 完整性保护与加密算法系列文章
  7. 【C语言练习——打印空心三角形】
  8. 蓝桥杯基础-【切面条】不用画图的解题思路
  9. 大数据是啥?大数据特点 大数据概念
  10. 【2021-07-15】JS逆向之网易云音乐(私信、关注、点赞)