前言
在平台跳跃游戏中,会遇到一种特殊的平台,从上面落下可以站在平台上面,从平台下面跳跃则可以穿透平台,如下图所示:
思路
原以为实现这种效果要自己写代码,当玩家跳跃的时候发射一条射线检测是否与上方的平台发生碰撞,如果发生碰撞就把玩家的刚体组件关掉,等落到平台的时候再重新开启,但实际上 Unity 引擎自带了这种特殊的碰撞组件,即根据角度来判定是否产生碰撞。
实现
创建一个 2D 图块用来测试,调节 scale 让它变成一个长条形的平台,修改 Tag 和 Layer 为设定好的 Ground(地板),再给它加上刚体和碰撞盒子,如下图所示:
到上面为止都是常规操作,接下来再给这个对象添加一个特殊的组件“Platform Effector 2D”,然后碰撞盒子组件的“Used By Effector”也勾选上:
神奇的一幕发生了!刚刚创建的平台,上面有个半圆形的区域,这个区域就是可碰撞范围了。至此,从上面落下可以站立,从下面跳跃可以穿透的平台就实现了!
扩展
如果要实现站在平台上,按下方向键可以穿透落下呢?这个时候就要用到上面的思路了,当玩家站在平台的时候,检测是否按下下方向键,如果按下下方向键就关闭玩家的刚体组件,直到玩家与平台离开接触的时候再恢复就可以了。