Unity3D射线检测墙面前停止移动
功能:
计算角色/怪物走到目标,如果有墙就再墙前停止,防止一直怼墙走现象。
思路:
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射线检测墙面前停止移动相关推荐
- Unity3d 射线检测
射线碰撞单个物体: 方式1:从摄像机向世界发射一条射线,通常用于检测鼠标指针有没有选择物体 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosi ...
- 行业分析-全球与中国3D自动X射线检测(AXI)市场现状及未来发展趋势
根据QYR(恒州博智)的统计及预测,2021年全球3D自动X射线检测(AXI)市场销售额达到了 亿美元,预计2028年将达到 亿美元,年复合增长率(CAGR)为 %(2022-2028).地区层面来看 ...
- 11.Unity2D 横版 简单AI 之背后受击转身+寻路跟随敌人+模块化+射线检测
总目录https://blog.csdn.net/qq_54263076/category_11900070.html?spm=1001.2014.3001.5482 1.敌人背后受击转身+背部攻击伤 ...
- 10.Unity2D 横版 简单AI 之 敌人随机移动+自动巡逻+障碍物跳跃+悬崖处转身+射线检测
总目录 9.Unity2D 简单AI 之 敌人跳跃条件优化+自动范围内检测敌人发起攻击(索敌)+对象池优化+主角受伤死亡_ζั͡ ั͡雾 ั͡狼 ั͡✾的博客-CSDN博客Unity2D 简单AI 之 ...
- 射线检测算法在游戏中应用
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D ...
- Unity 2019 射线检测失效
之前在做毕设的一个FPS游戏时,遇到了使用射线检测失效的情况,特此记录以下. 前因 在FPS游戏中,对于子弹的发射主要通过两种方式来实现. 一种可以通过实例化子弹的GameObject对其施加物理效果 ...
- UE4 手电筒射线检测
UE4 手电筒射线检测 功能物品:手电筒射线 功能描述:用于对NPC造成伤害或者有其他交互左右的物品 实现方法:每隔0.2秒发射几百根射线用于检测. 首先在摄像头上绑定一个SpotLight,初始设置 ...
- Unity3D 鼠标检测世界中的游戏对象
今天向大家介绍一下,如何初步的用Unity3D从摄像机到鼠标的射线,也就是鼠标检测到Unity3D世界中的游戏对象! 如何才能使射线检测到游戏对象呢,只有一个条件,那就是必须添加collider组件, ...
- 直播笔记 | Unity中射线检测详解
本文首发于洪流学堂微信公众号. 洪流学堂,学Unity快人几步 你好,我是郑洪智,你的技术探路者. 这周三我们直播剖析了Unity中射线检测的功能,以下是直播内容精华部分笔记. 完整录播:https: ...
最新文章
- python excel 追加写入_python excel写入及追加写入
- C# 4.0 新特性之并行运算(Parallel)
- 区域经济、地理信息、互联网三者交叉之行业背景分析
- 安卓界面之Viewpager和Tablayout实现滑动界面
- python socket编程:实现redirect函数、cookie和session
- test.php.bak,MongoDB热备份工具:解决官方版备份缺陷
- html中text函数,text函数的使用方法
- 迭代器 iterator
- jupyter-notebook设置⽀持远程访问
- SSH三大框架的工作原理及流程
- 在Linux上下载arduino
- 用来进行虚拟仿真实验的软件有哪些?这3款简单易懂的软件值得你拥有
- 程序猿周末副职业_早上,晚上和周末:我如何改变职业并成为程序员
- 解决微信调整字体大小导致页面样式混乱的问题
- josn转bln的方法
- FPGA课设实验二:计数器设计与仿真
- 【网络编程实践】2.4.2 muduo库安装与 procmon 编译
- Ebay API item_get - 获得EBAY商品详情
- python的擅长领域
- 数学英语不好能学php吗,英语和数学基础不好,还能学好编程吗?