以下内容是对自己制作过程中遇到问题的记录,不一定科学准确。
1.地面与角色的碰撞检测
当人物下落速度较大时,有时会出现人物穿过地面或嵌入到地面中的情况。
当使用Tilemap制作地面时:
- 为其添加Composite Collider2D组件
- 将上述组件中的Geometry Type选为Polygons
- 将Tilemap Collider2D中的Used By Composite勾选
按上述方法操作之后,原本空心的地面就成为了实心,可以一定程度上减少上述问题的发生。
对于人物,如果使用到了Rigidbody 2D组件:
可以将Rigidbody 2D组件中的Collision Detection选为Continuous
同时将Sleeping Mode选为Never Sleep
按上述方法操作之后,可以增加检测频率,可以在一定程度上减少速度太快导致没有检测到的情况。
2.操作过程中人物消失不见
如果人物图像反转使用修改transform.localScale来实现,要避免人物控制的代码中出现将transform.localScale.x置为0的情况。
不小心将transform.localScale.x置为0将会出现人物掉出地面的情况:
3.墙上控制
可以通过碰撞体或射线(我所了解的)来检测角色一侧与墙面是否接触。
以碰撞体为例,当处于空中的某个状态并检测到角色接触到墙面时,角色将吸附到墙上:
如果有如下需求:
- 从贴墙状态解除
- 蹬墙跳(与墙相反的方向)
- 贴墙跳(与墙相同的方向)
- 蹬墙冲刺(与墙面相反的方向冲刺)
以上操作看似简单,但我在实际制作时会遇到一些问题,如何协调”从贴墙状态解除“与下面几个操作的关系我是认为比较重要的。既然已经从贴墙状态解除了那么就不再是从贴墙状态向其他状态的转换了,自然很难做出丝滑精准的操作。
以蹬墙跳为例:
贴在左墙时,按下右方向键和跳跃键将会触发蹬墙跳跃,向与墙面相反的方向进行斜上跳跃
一般情况下,贴在左墙按下右方向键将会解除贴墙状态,如果贴墙状态下可以刷新二段跳跃,在解除贴墙后再跳跃则只能进行一次跳跃,这不是我所希望的。
同时还有贴墙跃,在进行这些操作时我不希望刚进入跳跃状态就立刻又转为贴墙状态,而是希望能够贴着墙面逐步向上攀跳。
对于贴墙反向冲刺,在进行操作时希望从贴墙状态直接转到冲刺状态而非解除贴墙后在空中冲刺。
为了同时解决以上问题,我所想到的一个简单解决办法是在进入贴墙状态时开启一个计时器,按下与墙面相反的方向键时计时器将会减少,否则更新,当计时器减为0时将解除贴墙状态,而计时器时间就是一个操作空间,在这个时间内是仍处于贴墙状态的。
这里计时器时间长短的设置是关键(比如0.25s):
- 计时器时间太长,玩家迟迟不能解除贴墙状态,可能会影响操作
- 计时器时间太短,玩家进行墙上操作的空间太小,可能使用不出相关操作