public enum State
{
walk,
run,
jump
}
public class StateArgs : EventArgs
{
public State OldValue {
get; }
public State NewValue {
get; }
public StateArgs(State _oldState, State _newState)
{
OldValue = _oldState;
NewValue = _newState;
}
}
[Serializable]
public class StateManager
{
private State mState;
public event EventHandler<StateArgs> st;
public State MyState
{
get => mState;
set
{
if (mState != value)
{
var oldValue = mState;
mState = value;
OnValueChange(oldValue, mState);
}
}
}
protected virtual void OnValueChange(State oldValue, State newValue)
{
st?.Invoke(this, new StateArgs(oldValue, newValue));
}
}
调用
int countwalk;
int countrun;
int countjump;
int count;
StateManager manager = new StateManager();
private void Start()
{
manager.st += (send, recive) =>
{
if (recive.NewValue == State.walk)
{
countwalk++;
}
if (recive.NewValue == State.run)
{
countrun++;
}
if (recive.NewValue == State.jump)
{
countjump++;
}
count++;
};
}