Unity2D游戏停止碰撞检测

萌新向

查到一个前辈使用的方法是
rigidbody.isKinematic = true;
//this.transform.GetComponent().isKinematic = true

让需要的人更容易搜到,就想写下来。(每次我找这样的信息就需要太久时间,不知道姿势哪里不对)。

<不重要的题外话>
前几天写完npc的行为,尝试放了50个。FPS就变得非常低了。
盲人摸象一般。。。重写了行为,突然变得好起来了。
之前NPC所有的行为都用Update 进行判断,对于性能耗损方面一无所知。
后来改成用InvokeRepeating判断,然后那些一次性需要生成大量资源的,改成用协程,就会好太多了!

后来在碰撞设定上面又难倒我了。。。
如果一万个NPC都加上碰撞箱,跟刚体。那滋味难以想象。

一开始的想法是让碰撞体Active = false,进入摄像机之后再Active = true;//或者直接移除碰撞箱跟刚体,进入摄像机之后再加入这些组件。

然后进行了一些折腾。。遇到一些难题,比如如何输出一个Sprite。
输出一个碰撞箱,可以通过射线,鼠标点击处,等方法。
通过什么办法能get到场景中的一个Sprite ?如果不能get到这个Sprite 就不能给它添加 碰撞箱组件。

然后再测试了让NPC的刚体进行睡眠。。。测试之后,发现只要有碰撞,刚体就会被唤醒。

最后就搜到了这个办法。。之前我以为它是用于重力系统。。差点就错过了。
这样碰撞箱被保留,又不会差生碰撞计算。如果需要进行碰撞,随时让该刚体isKinematic = false;
真的是很好的方式!

你可能感兴趣的:(Unity2D游戏停止碰撞检测)