C# 统一二维状态机
我制作了一个状态机来控制我的输入和状态动画。如何使用以下枚举:C# 统一二维状态机,c#,unity3d,enums,state,C#,Unity3d,Enums,State,我制作了一个状态机来控制我的输入和状态动画。如何使用以下枚举: public enum mover_personagem { mover_on, move_off } 要激活和取消激活输入,请执行以下操作: private void Movimentar(float horizontal) { if (move == mover_personagem.mover_on) { anim.SetFloat("speed", Mathf.Abs(Inp
public enum mover_personagem
{
mover_on,
move_off
}
要激活和取消激活输入,请执行以下操作:
private void Movimentar(float horizontal)
{
if (move == mover_personagem.mover_on)
{
anim.SetFloat("speed", Mathf.Abs(Input.GetAxis("Horizontal")));
myRigibody2D.velocity = new Vector2(
horizontal * moveSpeed,
myRigibody2D.velocity.y);
}
}
如果在播放器停止行走动画的对话框打开时使用state
mover\u off
,则该对话框不起作用。您可以创建一个名为Globals
的类或任何您想要的类,在其中可以声明所有静态变量
例如,您已经在Globals.cs
中创建了enum
及其变量
public enum MOVER_STATE
{
ON,
OFF
}
public class Globals
{
public static MOVER_STATE CURRENT_MOVER_STATE = MOVER_STATE.OFF; // Initial State
}
现在你可以在任何课程的任何地方查看它,比如
switch(Globals.CURRENT_MOVER_STATE){
case MOVER_STATE.OFF:
//TODO: Do anything if Off
break;
case MOVER_STATE.ON:
//TODO: Do anything if On
break;
}
您也可以将其分配到任何位置。如果(mover\u personagem==move.mover\u on)错误,则您正在使用枚举值来竞争枚举类型。您需要在同一个变量中设置枚举值,并使用它istead of mover_personagem==…可能您没有设置正确的变量。我的意思是,当类中的“move”和上面的代码保持为“mover\u personagem.mover\u on”时,您可以编辑其他一些枚举“move”。如果我在Movimentar类how public上实例化,在DialogueBox类how public上实例化,枚举不会变成静态的?我需要的是更改实例化的所有类的当前状态,通过它我可以控制这些状态。