Unity2D横版游戏之平台跳跃效果
简单介绍
平台跳跃效果。玩家允许在平台下方跳跃到平台上方,并且可以在平台上方站立,同时玩家在平台上方允许通过下跳操作到达平台下方。
实现步骤
(一)将玩家的图片设置为 Player、将平台的图层设置为 Platform。
(二)为平台游戏对象创建 XXXCollider2D 组件,并勾选 Used By Effector。
(三)为平台游戏对象创建 Rigidbody2D 组件,设置 BodyType 为 Static。
(四)为平台游戏对象创建 PlatformEffector2D 组件。
(五)编写脚本,实现思路如下:当玩家进行下跳操作时修改 PlatformEffector2D 组件的 colliderMask 的值,禁用平台对玩家的碰撞图层,当玩家下跳操作完成时再恢复平台对玩家的碰撞图层。通过在玩家头顶发出射线并检测是否与平台图层发生碰撞,如果碰撞则说明下跳操作完成。参考代码如下。
public class DemoFSMState : BaseFSMState
{
private Collider2D _platformCollider;
private PlatformEffector2D _platformEffector;
public DemoFSMState(FiniteStateMachine fsm, DemoParameter parameter) : base(fsm, parameter)
{
}
public override void OnEnter()
{
_platformCollider = Parameter.platformCollider;
_platformEffector = Parameter.platformEffector;
_platformEffector.colliderMask &= ~(1 << LayerMask.NameToLayer("Player"));
}
public override void OnUpdate()
{
Vector3 position = Parameter.transform.position;
Vector2 origin = new Vector2(position.x, position.y + Parameter.collider.size.y);
if (Physics2D.Raycast(origin, Vector2.up, 1f, LayerMask.GetMask("Platform")).collider == _platformCollider)
{
_platformEffector.colliderMask |= 1 << LayerMask.NameToLayer("Player");
}
}
}
禁用碰撞图层。
XXX.colliderMask &= ~(1 << LayerMask.NameToLayer("XXX"))
开启碰撞图层。
XXX.colliderMask |= 1 << LayerMask.NameToLayer("XXX");
后记
由于个人能力有限,文中不免存在疏漏之处,恳求大家斧正,一起交流,共同进步。
标签:Unity2D,平台,碰撞,玩家,colliderMask,platformEffector,横版,跳跃,图层 From: https://www.cnblogs.com/kkelin/p/18169468