U3D 아키텍처 제품군 - FSM 유한 상태기 설계 4
protected FiniteStateMachine.EnterState mEnterDelegate;
protected FiniteStateMachine.PushState mPushDelegate;
protected FiniteStateMachine.PopState mPopDelegate;
또한 유한 상태기의 상태를 처리하는 데 사용되는 매거진을 정의했습니다. 시스템에서 자체로 봉인된 세 개의 파라미터를 사용하고TResult 파라미터가 제정한 레이싱지를 되돌려주는 방법을 사용했습니다.
public Func<object,object,object,bool> mAction = null;
이 FSEvent 이벤트 클래스도 독립적이며 Mono를 계승하지 않습니다.FSState의 Enter, Push, Pop을 처리하는 것이 핵심 기능입니다.코드는 다음과 같습니다.
public FSState Enter(string stateName) {
mTargetState = stateName;
eType = EventType.ENTER;
return mStateOwner;
}
public FSState Push(string stateName) {
mTargetState = stateName;
eType = EventType.PUSH;
return mStateOwner;
}
public void Pop() {
eType = EventType.POP;
}
public void Execute(object o1,object o2,object o3) {
if (eType == EventType.POP) {
mPopDelegate();
}
else if (eType == EventType.PUSH) {
mPushDelegate(mTargetState, mOwner.CurrentState.StateName);
}
else if (eType == EventType.ENTER) {
mEnterDelegate(mTargetState);
}
else if (mAction != null) {
mAction(o1, o2, o3);
}
}
전반적으로 FSEvent는 Enter,Push,Pop,Execute를 호출하여 상태를 전환합니다.다음은 전체 코드를 보여드리겠습니다.
using System;
public class FSEvent {
protected FiniteStateMachine.EnterState mEnterDelegate;
protected FiniteStateMachine.PushState mPushDelegate;
protected FiniteStateMachine.PopState mPopDelegate;
protected enum EventType { NONE, ENTER, PUSH, POP };
protected string mEventName;
protected FSState mStateOwner;
protected string mTargetState;
protected FiniteStateMachine mOwner;
protected EventType eType;
public Func<object,object,object,bool> mAction = null;
public FSEvent(string name, string target, FSState state, FiniteStateMachine owner, FiniteStateMachine.EnterState e, FiniteStateMachine.PushState pu, FiniteStateMachine.PopState po) {
mStateOwner = state;
mEventName = name;
mTargetState = target;
mOwner = owner;
eType = EventType.NONE;
mEnterDelegate = e;
mPushDelegate = pu;
mPopDelegate = po;
}
public FSState Enter(string stateName) {
mTargetState = stateName;
eType = EventType.ENTER;
return mStateOwner;
}
public FSState Push(string stateName) {
mTargetState = stateName;
eType = EventType.PUSH;
return mStateOwner;
}
public void Pop() {
eType = EventType.POP;
}
public void Execute(object o1,object o2,object o3) {
if (eType == EventType.POP) {
mPopDelegate();
}
else if (eType == EventType.PUSH) {
mPushDelegate(mTargetState, mOwner.CurrentState.StateName);
}
else if (eType == EventType.ENTER) {
mEnterDelegate(mTargetState);
}
else if (mAction != null) {
mAction(o1, o2, o3);
}
}
}
디자인 네 개의 FSM에서 자주 사용하는 클래스가 봉인되었습니다. 다음은 디자인 5에서 이벤트시스템 클래스를 봉인할 것입니다.이벤트 처리에 사용되는 등록, 배달 등 기능.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Unity 최적화1. 프레임마다 처리하는 것을 최대한 피한다. 예를 들면: 5프레임당 한 번 처리로 변경할 수 있습니다. 2. 정시 반복 처리는 InvokeRepeating 함수로 이루어집니다. 예를 들어 0.5초 동안 시작한 후 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.