몬스터 Hit, Death 상태 틀 추가
This commit is contained in:
@@ -15,17 +15,16 @@ namespace TON
|
|||||||
if (other.CompareTag("Player"))
|
if (other.CompareTag("Player"))
|
||||||
{
|
{
|
||||||
_monsterBase.IsAttacking = true;
|
_monsterBase.IsAttacking = true;
|
||||||
// _monsterBase.SetTransition(new AttackState());
|
|
||||||
// _monsterBase.SetTransition(new MonsterSkillState());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnTriggerExit2D(Collider2D other)
|
private void OnTriggerExit2D(Collider2D other)
|
||||||
|
{
|
||||||
|
if (other.CompareTag("Player"))
|
||||||
{
|
{
|
||||||
_monsterBase.IsAttacking = false;
|
_monsterBase.IsAttacking = false;
|
||||||
// _monsterBase.SetTransition(new ChasingState());
|
_monsterBase.IsFisnishAttack = true; // 공격 종료 상태로 설정
|
||||||
|
}
|
||||||
// Debug.Log("감지 벗어남");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ namespace TON
|
|||||||
{
|
{
|
||||||
protected MonsterBase _monsterBase;
|
protected MonsterBase _monsterBase;
|
||||||
|
|
||||||
|
|
||||||
public AttackPattern(MonsterBase monsterBase)
|
public AttackPattern(MonsterBase monsterBase)
|
||||||
{
|
{
|
||||||
_monsterBase = monsterBase;
|
_monsterBase = monsterBase;
|
||||||
|
|||||||
@@ -36,6 +36,8 @@ namespace TON
|
|||||||
public bool IsDetect { get; set; } // 몬스터가 대상을 인식했는지 여부
|
public bool IsDetect { get; set; } // 몬스터가 대상을 인식했는지 여부
|
||||||
public bool IsAttacking { get; set; } // 몬스터가 공격했는지 여부
|
public bool IsAttacking { get; set; } // 몬스터가 공격했는지 여부
|
||||||
public bool IsFisnishAttack { get; set; } // 몬스터 공격 모션이 끝났는지 여부
|
public bool IsFisnishAttack { get; set; } // 몬스터 공격 모션이 끝났는지 여부
|
||||||
|
public bool IsHit { get; set; } // 몬스터 공격 모션이 끝났는지 여부
|
||||||
|
public bool IsDead { get; set; } // 몬스터 공격 모션이 끝났는지 여부
|
||||||
|
|
||||||
[SerializeField] private GameObject _target; // 몬스터의 타겟
|
[SerializeField] private GameObject _target; // 몬스터의 타겟
|
||||||
|
|
||||||
@@ -162,7 +164,8 @@ namespace TON
|
|||||||
if (prevHP > 0 && currentHP <= 0)
|
if (prevHP > 0 && currentHP <= 0)
|
||||||
{
|
{
|
||||||
// 몬스터가 죽었을 때 처리 (죽는 애니메이션은 주석 처리됨)
|
// 몬스터가 죽었을 때 처리 (죽는 애니메이션은 주석 처리됨)
|
||||||
Destroy(gameObject); // 몬스터 파괴
|
// Destroy(gameObject); // 몬스터 파괴
|
||||||
|
DestroyMonster();
|
||||||
}
|
}
|
||||||
else if (prevHP > 0 && currentHP > 0)
|
else if (prevHP > 0 && currentHP > 0)
|
||||||
{
|
{
|
||||||
@@ -248,5 +251,10 @@ namespace TON
|
|||||||
newSkill.transform.position = transform.position + new Vector3(0, 1f, 0);
|
newSkill.transform.position = transform.position + new Vector3(0, 1f, 0);
|
||||||
newSkill.GetComponent<MonsterSkill>().Direction = new Vector2(0, 1);
|
newSkill.GetComponent<MonsterSkill>().Direction = new Vector2(0, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void DestroyMonster()
|
||||||
|
{
|
||||||
|
Destroy(gameObject); // 몬스터 파괴
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -291,4 +291,79 @@ namespace TON
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class HitState : IState
|
||||||
|
{
|
||||||
|
private const string AniHit = "Hit";
|
||||||
|
private MonsterBase _monsterBase;
|
||||||
|
private float _hitDuration = 0.5f;
|
||||||
|
private float _hitStartTime;
|
||||||
|
|
||||||
|
public void Enter(MonsterBase monsterBase)
|
||||||
|
{
|
||||||
|
_monsterBase = monsterBase;
|
||||||
|
_monsterBase.ChangeAnimationState(AniHit);
|
||||||
|
_hitStartTime = Time.time;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Update()
|
||||||
|
{
|
||||||
|
if (Time.time >= _hitStartTime + _hitDuration)
|
||||||
|
{
|
||||||
|
_monsterBase.IsHit = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Exit()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public IState CheckTransition()
|
||||||
|
{
|
||||||
|
if (_monsterBase.IsHit)
|
||||||
|
return new HitState();
|
||||||
|
|
||||||
|
if (_monsterBase.IsDead)
|
||||||
|
return new DeathState();
|
||||||
|
|
||||||
|
if (Time.time >= _hitStartTime + _hitDuration)
|
||||||
|
return new IdleState();
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class DeathState : IState
|
||||||
|
{
|
||||||
|
private const string AniDeath = "Death";
|
||||||
|
private MonsterBase _monsterBase;
|
||||||
|
private float _deathDuration = 1f;
|
||||||
|
private float _deathStartTime;
|
||||||
|
private bool _deathAnimationStarted = false;
|
||||||
|
|
||||||
|
public void Enter(MonsterBase monsterBase)
|
||||||
|
{
|
||||||
|
_monsterBase = monsterBase;
|
||||||
|
_monsterBase.ChangeAnimationState(AniDeath);
|
||||||
|
_deathStartTime = Time.time;
|
||||||
|
_deathAnimationStarted = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Update()
|
||||||
|
{
|
||||||
|
if (_deathAnimationStarted && Time.time >= _deathStartTime + _deathDuration)
|
||||||
|
{
|
||||||
|
_monsterBase.DestroyMonster();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Exit()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public IState CheckTransition()
|
||||||
|
{
|
||||||
|
return this; // Death는 다른 상태로 전환되지 않음
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user