FSM써서 보스패턴 만들려고 구글링해서 어찌어찌 틀은 만들었는데
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public interface IState
{
void OnEnter();
void Update();
void OnExit();
}
public class Idle : IState
{
public void OnEnter()
{
}
public void Update()
{
}
public void OnExit()
{
}
}
public class Walk : IState
{
public void OnEnter()
{
}
public void Update()
{
agent.SetDestination(target.position);
anim.SetBool("Walk", isWalk);
}
public void OnExit()
{
}
}
public class Run : IState
{
public void OnEnter()
{
}
public void Update()
{
}
public void OnExit()
{
}
}
public class Attack : IState
{
public void OnEnter()
{
}
public void Update()
{
}
public void OnExit()
{
}
}
public class Dead : IState
{
public void OnEnter()
{
}
public void Update()
{
}
public void OnExit()
{
}
}
public enum state { Idle, Walk, Run, Attack, Dead }
public class BossPatternState : MonoBehaviour
{
public Transform bossPos;
public Transform target;
public NavMeshAgent agent;
public int checkRadius;
public LayerMask targetLayer;
public Animator anim;
[Header("Animation")]
public bool isWalk;
public bool isRun;
public bool isAttack;
public bool isDeath;
[Header("FSM")]
IState _IState;
state _state;
void Start()
{
bossPos = GetComponent<Transform>();
agent = GetComponent<NavMeshAgent>();
anim = GetComponent<Animator>();
}
void Update()
{
_IState.Update();
}
public void ChangeState(state changedstate)
{
_IState.OnExit();
_state = changedstate;
switch (_state)
{
case state.Idle:
_IState = new Idle();
break;
case state.Walk:
_IState = new Walk();
break;
case state.Run:
_IState = new Run();
break;
case state.Attack:
_IState = new Attack();
break;
case state.Dead:
_IState = new Dead();
break;
}
_IState.OnEnter();
}
void CheckTarget()
{
Collider[] rangeChecks = Physics.OverlapSphere(transform.position, checkRadius, targetLayer);
if (rangeChecks.Length != 0)
{
target = rangeChecks[0].GetComponent<Transform>();
}
}
}
이렇게 했는데 IState인터페이스 받은 클래스들이 BossPatternState에 있는 변수쓸려면 어떻게 해야하나요?
그냥 각 클래스한테 BossPatternState 인스턴스화 해서 넣어줘야하는건가요?
도와주세요 흑흑...
상태안에서 BossPatternState를 쓴다는건 이미 그 상태는 다른곳에서 재활용할 가능성은 없어보임. 그래서 따로 상태 클래스를 빼는게 의미가 있나 싶다.
https://github.com/thefuntastic/Unity3d-Finite-State-Machine
이거
써보삼. 나쁘지 않음
내가 직접 만들어서 사용하고싶어서 만든건데 덕분에 어떻게 해야할지 생각남 고마워!
그런거 좋다 직접만들어서 쓰는거. 응원한다!