unity随记

对于tilemap ,需要设置碰撞体的话应该为其选择专用的tilemap collider2D (假设是2d游戏)。注意,直接给对象tilemap加会导致整张地图都无法移动,如果为部分地图设置碰撞体,需要在资源里的rule tile(看自己用的是什么瓦片地图)中,针对不同的砖块,不需要碰撞的collider type从sprite改成none。

 

 另:rule override tile可以让一套瓦片继承另一套瓦片的拼接规则,但是他们的碰撞体设置也会被继承。如果需要让瓦片组B的碰撞体能单独设置,需要使用advanced rule override tile。

 

此外,每个瓦片都是一个碰撞体,存在微小的间隙。为了减少计算量、防止bug;给瓦片地图设置碰撞体时,在rigidbody中勾选used by composise,type选择static,并增加一个composite collider。这样一来i,一堆碰撞体就会被合并成一个大的碰撞体。

 

--------------------------

碰撞体collider组件里有一个选项trigger,即触发器。打开触发器功能,意味着碰撞体发生碰撞时,只记录发生了碰撞,但不阻止移动。这就意味着对象B可以穿过刚体A,但触发器会启动。

触发器有三种方法:进入(enter)、停留(stay)和离开

enter只在物体B进入物体A碰撞体范围时触发一次,stay则是进入后每帧触发一次(需要设置slppeing mode为never sleep,不然物体停止移动时会进入休眠,不再触发)

在使用了触发器的物体上,可以用

void OnTriggerEnter2D(Collider other)   这个方法来写发生触发时的行为,other就是碰到携带当前脚本对象的那个碰撞者。

 

-------------------------------------

如果不勾选触发器,则二者碰撞时可以使用对应的碰撞方法。

如:OnCollisionEnter2D(Collision2D other)  

posted @ 2022-05-10 16:25  namezhyp  阅读(53)  评论(0编辑  收藏  举报