(由于问题不好描述,所以标题就比较长了)
之前在做游戏时,发生角色与其他模型始终不能正常碰撞,总是会穿插,即角色穿过其他模型。其中角色有刚体和碰撞器组件,其他模型“有”碰撞器。
事后发现错误在于,其他模型的碰撞器组件被加到“组”上,而非组内每个物体中。
例如,一个客厅场景,有桌子、电视、墙壁,将3者打组成为一个组,命名“Environment”,再给Environment加个碰撞体组件。这样了,就会出现问题。
正确的做法是,给Environment组内的每个物体(桌子、电视、墙壁)都加上碰撞体组件。
PS:别忘了运动的角色模型需要加刚体和碰撞体。
1.碰撞条件:
https://blog.csdn.net/qiaoquan3/article/details/51339373
两个对象都有Collider组件且至少一个有Rigidbody组件;
其中至少一个物体(必须运动的)必须带有碰撞器(collider)+刚体(Rigidbody),另一个物体(可以静止也可以运动)也必须至少带有collider;
2.没有实体的东西(不是实际的物理个体)是可以被穿越的
:
https://blog.csdn.net/jeksonal/article/details/8434636
(由于问题不好描述,所以标题就比较长了)之前在做游戏时,发生角色与其他模型始终不能正常碰撞,总是会穿插,即角色穿过其他模型。其中角色有刚体和碰撞器组件,其他模型“有”碰撞器。事后发现错误在于,其他模型的碰撞器组件被加到“组”上,而非组内每个物体中。例如,一个客厅场景,有桌子、电视、墙壁,将3者打组成为一个组,命名“Environment”,再给Environment加个碰撞体组件。这样...
第二种:一般是由于被穿透
物体
太过于薄弱,根本没有检测到
碰撞
的
问题
,这种情况把
物体
加厚是不能解决
问题
的,因为这种情况下是由于
物体
移动的速度过快导致的。
这里有一个取巧的方法,把
unity
的整体地图变小,然后削减
物体
移动脚本中的速度,这样就
会
给
物体
碰撞
带来充足时间。
第三;关于
物体
自己动的
问题
,那是
物体
移动脚本和
物体
的角色
碰撞
器冲突了(charactercontroller),只需要删除角色控制器就好。当然也有其他的情况,那就是移动
物体
的
碰撞
器嵌在其他
物体
里面了
我们先来了解下刚体(rigidbody)属性参数:Collision Detection(
碰撞
检测):
三种选项:Discrete(离散),Continuous(连续),Continuous Dynamic(动态连续)。
参考下官方的解释:该属性用于控制避免高速运动
2.其中一个添加了刚体(rigidbody)
3.其中一个勾选了
碰撞
器中Is Trigger选项
* 勾选Is Trigger后,两个
物体
碰撞
时将不产生物理效果,也就是直接
穿过
去(穿模)
碰撞
体和触
看看有没有加刚体组件(rigidbody)。。。。。。。。。。。
这是我之前刚接触
unity
还对
unity
不了解的时候,也可以说是上课没认真听吧,摸索做一个小游戏结果穿模,捣鼓了半天都不知道怎么回事。
后来看了一些基础视频,才知道自己没给
物体
加刚体,太尴尬了。。。而且知道是缺刚体之后我才想起来老师好像讲过。。。。。
建立
场景
后,在
场景
中导入
unity
自带的第三人称
人物
模型
,有时候
会
出现
穿过
墙壁房屋或者其他
物体
,这个时候,给这些
物体
添加box collier属性即可解决
穿过
问题
。
可以调整box collier的属性center,scale的值,以便更好的控制。
在大部分游戏里面,我们的游戏主角在移动过程中都是无法穿透
场景
里面的
物体
的(除特殊情况外),这就涉及到
人物
的移动与
碰撞
的
问题
了。
相信
unity
里面的移动方法大家都
会
的,最简单的应该就是Translate()了,同时关于
碰撞
,一般的做法就是给
场景
物体
添上collider,给
人物
添上刚体rigibody和collider,如果怕被撞飞,就锁定x ,y , z。
那么
问题
来了,有时候我们明明
Unity
是一个流行的游戏引擎,它通常用于创建大型游戏。在
Unity
中,获取
场景
中的
物体
是一个重要任务,因为它涉及到游戏中许多对象的处理和控制。通过优化这个过程,您可以获得更流畅的游戏性能。
下面我将讲解一些商业实践中使用的一些方法:
第一,使用对象池:在游戏中经常
会
创建和销毁大量的
物体
,在每次创建新的
物体
时,
Unity
都
会
申请内存和销毁旧的
物体
,这样
会
导致游戏的性能下降。通过使用对象池,我们可以重复使用旧的
物体
,而不是每次都创建新的
物体
。这样可以减少内存的分配和销毁,提高性能和稳定性。
第二,使用缓存:在
Unity
中,每次使用Find获取GameObject引用都
会
访问
场景
树结构,这
会
导致性能下降。通过使用缓存,我们可以通过在
场景
加载时获取对
物体
的引用,并将它们存储在全局或静态变量中,以便在游戏运行时直接使用,这可以显著提高游戏性能。
第三,使用八叉树:如果您的
场景
中有很多
物体
,那么查找和获取这些
物体
的引用
会
变得很麻烦。一种解决方案是使用八叉树。八叉树是一种用于快速定位
物体
的数据结构,可以将
场景
划分为多个较小的区域。这个技术使得查找特定的
物体
更加高效,并且可以减少游戏的卡顿现象。
第四,使用裁剪技术:在游戏中,有些
物体
可能不需要显示出来。通过使用裁剪技术,我们可以检查每个
物体
是否在摄像机的视野内。这可以减少需要处理的
物体
数量,并提高性能。
总之,从各种角度来看,
Unity
优化
场景
中
物体
获取是一个非常重要的任务。通过使用适当的技术,我们可以减少CPU时间,提高游戏性能并创造更好的游戏体验。
h8476532:
【转】UnicodeEncodeError: 'gbk' codec can't encode character ...[省略] illegal multibyte sequence
两种解决方法:python3 csv writerow 写入文件多空行