FSM - sunbang123/study_report GitHub Wiki
- κ°μ²΄μ μνλ₯Ό λνλ΄κ³ , μνμ λ°λΌ νλμ λ€λ₯΄κ² μννλλ‘ κ΄λ¦¬ν¨.
- μ μΊλ¦ν°μ AI(νλ)μ μ΄μ λ§μ΄ μ°μ.
- Idle(λκΈ°) μν
- Patrol(μμ°°) μν
- Attack(곡격) μν
- Dead(μ£½μ) μν
public interface IEnemyState
{
void EnterState(EnemyFSM enemy);
void UpdateState(EnemyFSM enemy);
void ExitState(EnemyFSM enemy);
}
public IdleState : IEnemyState
{
public void EnterState(EnemyFSM enemy)
{
}
public void UpdateState(EnemyFSM enemy)
{
if(Time.time - enemy.StateEnterTime > 2f)
{
enemy.SwitchState(new PatrolState());
}
}
// ...
}
public class EnemyFSM : MonoVehaviour
{
public Movement2D movement2D;
private IEnemyState currentState;
public float StateEnterTime { get; private set; }
public Vector3 MoveDirection { get; private set; }
private void Awake()
{
movement2D = GetComponent<Movement2D>();
}
private void Start()
{
SwitchState(new IdleState());
}
private void Update()
{
currentState?.UpdateState(this);
}
public void SwitchState(IEnemyState newState)
{
currentState?.ExitState(this);
currentState = newState;
StateEnterTime = Time.time;
currentState.EnterState(this);
}
// ...
}
public enum Direction
{
Up,
Left,
Right,
Down,
Count
}
β μν(State)λ₯Ό ν΄λμ€λ‘ λλκ³ , μνλ§λ€ Enter/Update/Exitμ ꡬννλ€.
β EnemyFSMμμ νμ¬ μνλ₯Ό κ΄λ¦¬νλ©° μν μ ν(SwitchState)μ λ΄λΉνλ€.
β Updateμμ νμ¬ μνμ UpdateState()λ₯Ό νΈμΆν΄ μνλ§λ€ λ€λ₯΄κ² νλνλλ‘ νλ€.
- FSMμ νλμ½λ©λ κ·μΉ κΈ°λ°μ. μνλ₯Ό μ½λλ‘ μ§μ μ μνκ³ λμꡬννκ².
- λ₯λ¬λμ μ μ©μν¨λ€λ©΄?
- λ°μ΄ν°μμ ν¨ν΄μ νμ΅νλλ‘ λͺ¨λΈμ νλ ¨μν΄
FSM κ·μΉ: λͺ¨λ μν μ ν λ‘μ§μ νλ‘κ·Έλλ¨Έκ° μ€κ³
λ₯λ¬λ : λ°μ΄ν°λ₯Ό λ³΄κ³ 'νλ μ΄μ΄κ° κ·Όμ²μ μμΌλ©΄ 곡격'κ°μ νλμ νμ΅μν΄. μ λ ₯(νλ μ΄μ΄ μμΉ, μ 체λ ₯, μ₯μ λ¬Ό μμΉ)μ λ°μμ μΆλ ₯(μμ§μ λ°©ν₯, μνμ ν)μ μμΈ‘
νλ§λλ‘, FSMμ μνμ νμ λ₯λ¬λ λͺ¨λΈμ΄ κ²°μ νκ² νλκ²μ!
[λ₯λ¬λ λͺ¨λΈ]
ββ μ
λ ₯: νμ¬ μν, μ£Όλ³ μ 보
ββ μΆλ ₯: λ€μ μν μμΈ‘
μ) Attack, Patrol, Idle
[EnemyFSM]
ββ μν μ ν: λ₯λ¬λ λͺ¨λΈμ μμΈ‘ κ²°κ³Όμ λ°λΌ μν μ ν
ββ μν λμ: μν ν¨ν΄ κΈ°λ°μΌλ‘ μ½λ© (μ: Move, Attack)
- μ€ν μμ: Unity Barracuda(μ λν°μ ONNX λ₯λ¬λ λ°νμ)
- μΌλ°μ μΌλ‘ Python + PyTorch/TensorFlowλ‘ νμ΅ν λ€ λͺ¨λΈμ λ΄λ³΄λ΄μ (ONNX λ±) Unityμμ Barracudaλ‘ λΆλ¬μ€λ μμ μ¬μ©ν¨.
Pythonμμ κ°ννμ΅(μ: PPO, DQN)μΌλ‘ μ νλμ νμ΅.
λͺ¨λΈμ ONNXλ‘ export.
Unity Barracudaμμ ONNX λͺ¨λΈ λ‘λ ν μμΈ‘.
- κ²μ λ΄ μΆμ² μμ€ν
μ: νν λ¦¬μΌ μ€μ νλ μ΄μ΄ μ€λ ₯μ λ§μΆ° λμ΄λ μΆμ².
νλ μ΄μ΄κ° μ΄λ€ 무기λ μΊλ¦ν°λ₯Ό μ’μν μ§ μμΈ‘.
νλ μ΄μ΄μ νλ ν¨ν΄ λΆμ β βμ΄λ° μμ΄ν μ μΆμ²ν΄λ³ΌκΉ?βλ‘ μ°κ²°.