当前位置:网站首页>Unity行人随机行走不碰撞
Unity行人随机行走不碰撞
2022-07-24 13:45:00 【strawberry47】
1.基础知识:
1.1 刚体RigidBody
Unity零基础到入门 ️|刚体(RigidBody)
当一个游戏对象被赋予RigidBody组件之后,游戏引擎就会对其进行物理效果的计算和模拟。同时我们也可以给这个对象施加各种作用力,让它运动起来。会受到重力影响。
属性:Mass(质量)、Drag(阻力)、Angular Drag(角阻力)、Use Gravity(是否使用重力)、Is Kinematic(是否受物理影响)、Collision Detection(碰撞检测)等。
注意:刚体对于系统的开销是很大的,所以在使用刚体时,根据可能发生的碰撞触发事件,适当的减少刚体,是一个减少资源消耗的好办法。 比如地面就可以不设置刚体,因为地面是永远不动的,把人物设置刚体就可以实现真实的物理碰撞效果了。
1.2 碰撞体Collider
Unity零基础到入门 ️| Collider (物体碰撞器)
Collider (物体碰撞器)碰撞器是Unity引擎为模拟物理效果的组件功能:可以让两个带有碰撞器的游戏对象相互接触的时候不会穿透过去,会根据物理规则运动。
需要定义物理形状,是隐形的,并非模型的形状哦!相当于检测碰撞范围。可以用多种形状组合碰撞体。
不需要动起来的物体(地板、墙壁)都可以设置为Collider,可以阻止物体穿过。不过,创建基础模型是自带collider的。
1.3 二者区别
- Collider只是给物体加上了碰撞,让物体拥有了实体,而不是一个可以穿过去‘全息投影’。而Rigidbody是让物体拥有了动态受力的功能。
- 不需要动起来的物体,只需要阻挡别的物体别穿过他们就行了,所以它们只需要添加Collider就行。因为添加了Rigidbody组件后会带来很多的物理计算,所以只需要给会移动的物体添加Rigidbody就行。

1.4 触发碰撞条件
产生碰撞的条件是:
① 2 个游戏对象都有 Collider
② 至少有一个游戏对象有 Rigidbody
③ 2 个游戏对象保持相对运动(一个 Cube 放在 Plane 上,不会产生碰撞,因为没有相对运动)
有两种回调方法,碰撞器回调OnCollisionEnter和触发器回调OnTriggerEnter:
碰撞器回调方法:
// 碰撞开始
void OnCollisionEnter(Collision other)
// 碰撞过程中,每帧调用一次
void OnCollisionStay(Collision other)
// 碰撞结束
void OnCollisionExit(Collision other)
触发器回调方法:
// 触发开始
void OnTriggerEnter(Collider other)
// 触发过程中,每帧调用一次
void void OnTriggerStay(Collider other)
// 触发结束
void OnTriggerExit(Collider other)
当A,B都添加刚体(Rigidbody)时:
- OnCollisionEnter方法:A和B相互碰撞时,无论是谁碰撞的谁,两者都能触发OnCollisionEnter方法,前提是两者都没有勾选isTrigger。
- OnTriggerEnter方法:A或者B中有一个勾选isTrigger或者两者都勾选isTrigger后,A和B都可以触发OnTriggerEnter方法,但是不可进入OnCollisionEnter方法。
当A,B有一个添加了刚体(Rigidbody)时:
- OnCollisionEnter方法:① 若A添加了刚体,B没有添加刚体,A去碰撞B,则A会被弹开,B不会运动,此时A、B都会触发OnCollisionEnter方法。② 若A添加了刚体,B没有添加刚体,B去碰撞A,不会发生碰撞效果,此时A和B都不会触发OnCollisionEnter方法。
- OnTriggerEnter方法:只要A和B中有一个添加了刚体,无论谁碰撞谁,两者都会触发 OnTriggerEnter方法。
总结:
- OnCollisionEnter方法要求碰撞的发起方必须拥有刚体,而被碰撞方有没有刚体并不重要。OnTriggerEnter方法则对此没有要求,只需要碰撞双方有一个具有刚体即可触发。即刚体是一个判断是否实现碰撞的是与否的标志
- 如果想实现两个刚体物理的实际碰撞效果时候用OnCollisionEnter,Unity引擎会自动处理刚体碰撞的效果。如果想在两个物体碰撞后自己处理碰撞事件用OnTriggerEnter。
2. 思路:
组件:人群都需要添加Rigidbody,Collider组件;其他障碍物添加Collider组件。
2.1 法一:自己编写规则
碰撞时触发OnTriggerEnter方法,需要自己编写避让规则。一般规则是销毁其中一方,或者反弹。暂时没找到避让方法代码,有点难度。
2.1 法二:碰撞规避
将行人对象的Layer设置为相同层级,再调整碰撞矩阵,就会互相不碰撞了。这里的不碰撞并不是“避障”,只是不检测碰撞了。
Unity碰撞检测 视频, unity 设置layer 使碰撞器不碰撞
也可以通过 勾选isTrigger属性,并在OnTriggerEnter函数中判断相撞对象是否是行人,是的话就不采取任何操作 来实现不碰撞的效果。but 这种方法需要检测碰撞,再执行回调函数,消耗更大。
这类方法很简单,可以作为保底方法。
2.3 法三:避障算法
运用避障算法实现:
- unity 简易雷达避障效果实现,扩展到行人场景有点困难,不太推荐这种方法。
- Unity RVO动态避障实战系列【1】,避让效果非常贴近现实场景,给了代码。推荐尝试!
边栏推荐
- Network security - file upload competitive conditions bypass
- Network security - Web information collection
- 网络安全——文件上传内容检查绕过
- 群体知识图谱:分布式知识迁移与联邦式图谱推理
- How to generate expected data? Emory University and others' latest "deep learning controllable data generation" review, 52 page PDF, covering 346 documents, comprehensively expounds the controllable g
- 支持鹏程系列开源大模型应用生态演化的可持续学习能力探索
- Flink综合案例(九)
- CSP2021 T3 回文
- CSP2021 T1 廊桥分配
- 网络安全——报错注入
猜你喜欢

Common OJ questions of stack and queue

How to generate expected data? Emory University and others' latest "deep learning controllable data generation" review, 52 page PDF, covering 346 documents, comprehensively expounds the controllable g

Network security - error injection

WSDM 22 | graph recommendation based on hyperbolic geometry

爱可可AI前沿推介(7.24)

Outdoor billboards cannot be hung up if you want! Guangzhou urban management department strengthens the safety management of outdoor advertising

Odoo+ test

Group intelligence decision-making in an open environment: concepts, challenges and leading technologies

Flex layout

Exploration of sustainable learning ability to support the application of ecological evolution of Pengcheng series open source large models
随机推荐
How to verify the domain name after applying for SSL digital certificate?
Network security -- man in the middle attack penetration test
From cloud native to intelligent, in-depth interpretation of the industry's first "best practice map of live video technology"
Go redis pipeline application
网络安全——文件上传黑名单绕过
Spelling words~
Ggarrange function of R language ggpubr package combines multiple images and annotates them_ Figure add annotation, annotation, annotation information for the combined image, and add annotation inform
Editor formula
简易订单管理系统小练习
交换机链路聚合详解【华为eNSP】
Detailed explanation of odoo JS DoAction
uni-app 背景音频 熄屏或者退回桌面之后不在播放
R语言使用epiDisplay包的tableStack函数制作统计汇总表格(基于目标变量分组的描述性统计、假设检验等)、设置by参数为目标变量、设置percent参数配置是否显示百分比信息
Kunyu(坤舆) 安装 详解
Some simple commands
R语言ggpubr包的ggarrange函数将多幅图像组合起来、annotate_figure为组合图像添加注释、注解、标注信息、使用left参数在可视化图像左侧添加注解信息(字体颜色、旋转角度等)
Explain flex layout in detail
Why are there "two abstract methods" in the functional interface comparator?
Outdoor billboards cannot be hung up if you want! Guangzhou urban management department strengthens the safety management of outdoor advertising
Group intelligence decision-making in an open environment: concepts, challenges and leading technologies