Unity2D横版移动跳跃问题——关于一段跳与二段跳.
前提:了解2D移动,可参考我另一篇博文https://blog.csdn.net/weixin_42622658/article/details/93972575
1.初始条件:
1.角色只绑定一个碰撞体,移动时施加力或给予速度,用跳跃次数JumpTimes或者bool值OnGround判断是否在地面。
2.只用一个tilemap搭建2D场景,因此所有tilemap的图块都是同一个tag,用于判断是否落回地面。
2.出现的问题:
- 当角色跳起来接触左右墙壁时按住左右移动键,会出现卡墙现象,就是角色不会因为重力掉下来,而接触墙壁停止在半空(不符合客观规律)
- 不知道碰撞体是碰到墙壁还是地面或天花板,因为所有图块都是同一个tag,导致如果直接在OnCollisionEnter2D方法函数里通过判断碰撞体的tag是否为地面Ground,是就重置跳跃次数或者OnGround变为true(碰到墙也可以重置跳跃,导致可以不断卡墙无限跳)
3.解决方案
1.通过添加空子物体并给予trigger于角色上,来检测四个方向的碰撞,从而区分是哪边碰到
缺点:每个prefab都要重复相同的绑定,且如果角色为不规则图形,可能出现bug,例如:
如果角色快要从高处移动到要掉落时,刚好trigger没接触地,判断已经离开地面,