各状态继承自抽象类SealedSMB
public abstract class SealedSMB : StateMachineBehaviour
{
//进入
public sealed override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { }
//状态执行
public sealed override void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { }
//状态结束
public sealed override void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { }
}
各个状态通过调用PlayerCharacter接口实现运动逻辑
public class OnwallSMB : SceneLinkedSMB<PlayerCharacter>
{
public override void OnSLStateNoTransitionUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
m_MonoBehaviour.GroundedHorizontalMovement(false);
m_MonoBehaviour.UpdateOnWallFacing(); //更新面朝方向
m_MonoBehaviour.CheckForOnWallState();
m_MonoBehaviour.CheckForGrounded();
m_MonoBehaviour.CheckForWall();
if (m_MonoBehaviour.CheckForJumpInput())
m_MonoBehaviour.WallJump();
else if (m_MonoBehaviour.CheckForDashInput())
m_MonoBehaviour.Dash();
//实现粒子效果
//检查是否出现了蹬墙跳和冲刺逻辑
}
}
参考:[Tiny_Celeste_v3]https://github.com/casuak/Game_1_Tiny_Celeste_v3
碰撞检测(以弹簧为例): 拥有三个组件E_Spring, C_ColliderChecker, C_EjectPlayer. E_Spring的Update更新C_ColliderChecker中获取到的触发对象, 需要提前在Unity中配置需要检测的对象. C_EjectPlayer根据获取到的触发对象调用触发对象的接口. 由于不同的Tilemap都需要C_ColliderChecker的功能,因此单独分离出来.
public class E_Spring : E_PrefabTile
{
void Update()
{
//检测是否与玩家进行碰撞,结果存放在 colliderChecker.checker.targetList
colliderChecker.ColliderCheckerSystem();
//根据targetList中获取到的碰撞体调用PalyerCharacter执行对应的逻辑
ejectPlayer.EjectPlayerSystem();
}
}
public class C_EjectPlayer : EntityComponent
{
private ColliderCheckerItem m_PlayerChecker;
private void Awake()
{
//初始化 Spring 的ColliderChecker
m_PlayerChecker = GetComponentNotNull<C_ColliderChecker>().GetChecker("Player Checker");
}
public void EjectPlayerSystem()
{
//从checker中获取碰撞检测的对象
foreach (var tagContainer in m_PlayerChecker.targetList)
{
//根据ColliderCheckerItem的targetList获取到PlayerCharacter对象
var player = (PlayerCharacter) tagContainer.GetEntityObject();
...
//执行对应的触发弹簧的接口
player.BeEjected(velocity);
}
}
}
AI.mp4
atk.mp4
参考: 跳跃修正
主要涉及TimeLine以及SceneManager的使用
UI + 开始菜单 + 音频 + BOSS战