在编码前我一直有个疑问,为什么不是将方法写在一个一个类中,或者用的单例模式写个管理器来继承的方式来做怪物脚本,玩家控制和玩家动画控制的代码混在一起不说,与其他脚本之间的交互,让过于冗杂的代码不易阅读
这节开始应用的有限状态机,似乎一定程度上解决了这个问题,但是之前的代码写都写了,所以只能将一部分放到状态机之中,将就写吧
1.有限状态机
思考,写一个基类状态机,应该有哪些状态机类,应该写成什么类型?
1.进入和退出肯定要有,也要有帧更新,还有因为该案例的移动方式是利用刚体的速度,所以还需要一个物理帧更新
而玩家和怪物要分别继承所以可以用抽象类,用接口也可以,缺点就是不能写一些基础的行为让子类继承
public abstract class BaseState
{
public abstract void OnEnter();
public abstract void NormalUpdate();
public abstract void PhysicsUpdate();
public abstract void OnExit();
}
野猪的巡逻状态
using System.Collections;
using System.Collections.Generic;
using System.Threading;
using System.Xml;
using UnityEngine;
public class BoarPaxtrolState : BaseState {
public override void OnEnter(Monster wcurrentMonster) {
currentMonster = wcurrentMonster;
}
public override void NormalUpdate() {
if ((currentMonster.headFor.x > 0 && currentMonster.physicscheck.isRightWall)
|| (currentMonster.headFor.x < 0 && currentMonster. physicscheck.isLeftWall)
||!currentMonster.physicscheck.isGround)
{
currentMonster.waitState = true;
currentMonster.animator.SetBool("walk", false);
}
}
public override void PhysicsUpdate() {
}
public override void OnExit() {
currentMonster.animator.SetBool("walk",false);
}
}
标签:void,abstract,状态机,Unity,currentMonster,using,牢弟,public
From: https://blog.csdn.net/2301_77947509/article/details/141321675