MonsterBase 및 StateMachine 코드 정리

This commit is contained in:
Mingu Kim
2025-02-18 00:55:23 +09:00
parent f75712a330
commit 41234e3e97
9 changed files with 87 additions and 291 deletions

View File

@@ -210,7 +210,7 @@ AnimationClip:
m_HasGenericRootTransform: 0 m_HasGenericRootTransform: 0
m_HasMotionFloatCurves: 0 m_HasMotionFloatCurves: 0
m_Events: m_Events:
- time: 0.5 - time: 0.48333332
functionName: FinishAttack functionName: FinishAttack
data: data:
objectReferenceParameter: {fileID: 0} objectReferenceParameter: {fileID: 0}

View File

@@ -1,18 +1,18 @@
[ [
{ {
"skillId": "001", "skillId": 0,
"skillName": "얼음 공격", "skillName": "IceBlast",
"damage": 50, "damage": 50,
"cooldown": 5, "cooldown": 5,
"range": 5, "range": 5,
"animationName": "IceBlast" "prefabName": "IceBlastPrefab"
}, },
{ {
"skillId": "002", "skillId": 1,
"skillName": "화염구", "skillName": "SmallFire",
"damage": 50, "damage": 50,
"cooldown": 5, "cooldown": 5,
"range": 5, "range": 5,
"animationName": "SmallFire" "prefabName": "smallFirePrefab"
} }
] ]

View File

@@ -1,12 +1,28 @@
[ [
{ {
"id": 1, "id": 0,
"name": "blueDragon", "name": "blueDragon",
"level": 1, "level": 1,
"hp": 10, "hp": 10,
"attackPower": 35, "attackPower": 35,
"defencePower": 36, "defencePower": 36,
"monsterSkillID": "001", "monsterSkillID": 0,
"monsterSkillIDTwo": 1,
"patrolRange": 1,
"detectionRange": 1,
"chaseRange": 1,
"moveSpeed": 1,
"attackRange": 1
},
{
"id": 1,
"name": "greenDragon",
"level": 1,
"hp": 10,
"attackPower": 35,
"defencePower": 36,
"monsterSkillID": 0,
"monsterSkillIDTwo": 1,
"patrolRange": 1, "patrolRange": 1,
"detectionRange": 1, "detectionRange": 1,
"chaseRange": 1, "chaseRange": 1,
@@ -15,26 +31,13 @@
}, },
{ {
"id": 2, "id": 2,
"name": "greenDragon",
"level": 1,
"hp": 10,
"attackPower": 35,
"defencePower": 36,
"monsterSkillID": "001",
"patrolRange": 1,
"detectionRange": 1,
"chaseRange": 1,
"moveSpeed": 1,
"attackRange": 1
},
{
"id": 3,
"name": "redDragon", "name": "redDragon",
"level": 1, "level": 1,
"hp": 10, "hp": 10,
"attackPower": 35, "attackPower": 35,
"defencePower": 36, "defencePower": 36,
"monsterSkillID": "001", "monsterSkillID": 0,
"monsterSkillIDTwo": 1,
"patrolRange": 1, "patrolRange": 1,
"detectionRange": 1, "detectionRange": 1,
"chaseRange": 1, "chaseRange": 1,

View File

@@ -6181,27 +6181,11 @@ MonoBehaviour:
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
id: 0 id: 0
monsterName:
level: 0
currentHP: 0
attackPower: 0
defencePower: 10 defencePower: 10
monsterSkillID: 0
patrolRange: 0
detectionRange: 0
chaseRange: 0
speed: 3
attackRange: 0
_spriteRenderer: {fileID: 135546803} _spriteRenderer: {fileID: 135546803}
_target: {fileID: 0} _target: {fileID: 0}
_collider: {fileID: 0} _collider: {fileID: 0}
_hpBarImage: {fileID: 0} _hpBarImage: {fileID: 0}
skillId: 0
skillName:
damage: 0
cooldown: 0
range: 0
animationName:
smallFirePrefab: {fileID: 0} smallFirePrefab: {fileID: 0}
DragonBreathPrefab: {fileID: 0} DragonBreathPrefab: {fileID: 0}
IceBlastPrefab: {fileID: 0} IceBlastPrefab: {fileID: 0}
@@ -6213,7 +6197,6 @@ MonoBehaviour:
WolfPunchPrefab: {fileID: 0} WolfPunchPrefab: {fileID: 0}
DragonShockWavePrefab: {fileID: 0} DragonShockWavePrefab: {fileID: 0}
FireImpactPrefab: {fileID: 0} FireImpactPrefab: {fileID: 0}
DropObjectPrefab: {fileID: 0}
--- !u!4 &141676838 stripped --- !u!4 &141676838 stripped
Transform: Transform:
m_CorrespondingSourceObject: {fileID: 866829735663616565, guid: 1e126f96ebcf4245a3328353992d46f6, type: 3} m_CorrespondingSourceObject: {fileID: 866829735663616565, guid: 1e126f96ebcf4245a3328353992d46f6, type: 3}
@@ -17731,27 +17714,11 @@ MonoBehaviour:
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
id: 0 id: 0
monsterName:
level: 0
currentHP: 0
attackPower: 0
defencePower: 10 defencePower: 10
monsterSkillID: 0
patrolRange: 0
detectionRange: 0
chaseRange: 0
speed: 3
attackRange: 0
_spriteRenderer: {fileID: 431020305} _spriteRenderer: {fileID: 431020305}
_target: {fileID: 1333310376} _target: {fileID: 1333310376}
_collider: {fileID: 2147245667} _collider: {fileID: 2147245667}
_hpBarImage: {fileID: 309509381} _hpBarImage: {fileID: 309509381}
skillId: 0
skillName:
damage: 0
cooldown: 0
range: 0
animationName:
smallFirePrefab: {fileID: 4487626989189845864, guid: 0cc74a53f6c5c944b86daaa75d4bc576, type: 3} smallFirePrefab: {fileID: 4487626989189845864, guid: 0cc74a53f6c5c944b86daaa75d4bc576, type: 3}
DragonBreathPrefab: {fileID: 1270587839958746621, guid: a7b411323f70c6c4db9d2cab98824bd2, type: 3} DragonBreathPrefab: {fileID: 1270587839958746621, guid: a7b411323f70c6c4db9d2cab98824bd2, type: 3}
IceBlastPrefab: {fileID: 5091201270221039787, guid: e0e47ef64af779949aef813fbc15f1b5, type: 3} IceBlastPrefab: {fileID: 5091201270221039787, guid: e0e47ef64af779949aef813fbc15f1b5, type: 3}
@@ -17763,7 +17730,6 @@ MonoBehaviour:
WolfPunchPrefab: {fileID: 123878659603861660, guid: bdee23ac65f6d2b4bafefc94600190c8, type: 3} WolfPunchPrefab: {fileID: 123878659603861660, guid: bdee23ac65f6d2b4bafefc94600190c8, type: 3}
DragonShockWavePrefab: {fileID: 3715909542404085769, guid: 358f073558c5daa4185d8950938ae415, type: 3} DragonShockWavePrefab: {fileID: 3715909542404085769, guid: 358f073558c5daa4185d8950938ae415, type: 3}
FireImpactPrefab: {fileID: 6470166121172466421, guid: b12ab214fbad9a449bc80119f185111e, type: 3} FireImpactPrefab: {fileID: 6470166121172466421, guid: b12ab214fbad9a449bc80119f185111e, type: 3}
DropObjectPrefab: {fileID: 5413697641276301969, guid: 82350566434da384cb94c1c2624dbeae, type: 3}
--- !u!95 &431020300 --- !u!95 &431020300
Animator: Animator:
serializedVersion: 5 serializedVersion: 5
@@ -47902,67 +47868,6 @@ Sprite:
m_PhysicsShape: [] m_PhysicsShape: []
m_Bones: [] m_Bones: []
m_SpriteID: m_SpriteID:
--- !u!1001 &1205629222
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 705413505888271155, guid: 69c66b62d5d42aa48b34c97c6131188f, type: 3}
propertyPath: _spriteRenderer
value:
objectReference: {fileID: 1862079974}
- target: {fileID: 4336427122757065448, guid: 69c66b62d5d42aa48b34c97c6131188f, type: 3}
propertyPath: m_Name
value: RedRex
objectReference: {fileID: 0}
- target: {fileID: 8864163214463241537, guid: 69c66b62d5d42aa48b34c97c6131188f, type: 3}
propertyPath: m_LocalPosition.x
value: 12.868645
objectReference: {fileID: 0}
- target: {fileID: 8864163214463241537, guid: 69c66b62d5d42aa48b34c97c6131188f, type: 3}
propertyPath: m_LocalPosition.y
value: -7.968115
objectReference: {fileID: 0}
- target: {fileID: 8864163214463241537, guid: 69c66b62d5d42aa48b34c97c6131188f, type: 3}
propertyPath: m_LocalPosition.z
value: 0.060982164
objectReference: {fileID: 0}
- target: {fileID: 8864163214463241537, guid: 69c66b62d5d42aa48b34c97c6131188f, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 8864163214463241537, guid: 69c66b62d5d42aa48b34c97c6131188f, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8864163214463241537, guid: 69c66b62d5d42aa48b34c97c6131188f, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8864163214463241537, guid: 69c66b62d5d42aa48b34c97c6131188f, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8864163214463241537, guid: 69c66b62d5d42aa48b34c97c6131188f, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8864163214463241537, guid: 69c66b62d5d42aa48b34c97c6131188f, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8864163214463241537, guid: 69c66b62d5d42aa48b34c97c6131188f, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 69c66b62d5d42aa48b34c97c6131188f, type: 3}
--- !u!114 &1207338009 --- !u!114 &1207338009
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -48956,27 +48861,11 @@ MonoBehaviour:
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
id: 0 id: 0
monsterName:
level: 0
currentHP: 0
attackPower: 0
defencePower: 10 defencePower: 10
monsterSkillID: 0
patrolRange: 0
detectionRange: 0
chaseRange: 0
speed: 3
attackRange: 0
_spriteRenderer: {fileID: 1254298208} _spriteRenderer: {fileID: 1254298208}
_target: {fileID: 1333310376} _target: {fileID: 1333310376}
_collider: {fileID: 199081697} _collider: {fileID: 199081697}
_hpBarImage: {fileID: 0} _hpBarImage: {fileID: 0}
skillId: 0
skillName:
damage: 0
cooldown: 0
range: 0
animationName:
smallFirePrefab: {fileID: 0} smallFirePrefab: {fileID: 0}
DragonBreathPrefab: {fileID: 0} DragonBreathPrefab: {fileID: 0}
IceBlastPrefab: {fileID: 0} IceBlastPrefab: {fileID: 0}
@@ -48988,7 +48877,6 @@ MonoBehaviour:
WolfPunchPrefab: {fileID: 0} WolfPunchPrefab: {fileID: 0}
DragonShockWavePrefab: {fileID: 0} DragonShockWavePrefab: {fileID: 0}
FireImpactPrefab: {fileID: 0} FireImpactPrefab: {fileID: 0}
DropObjectPrefab: {fileID: 0}
--- !u!95 &1254298203 --- !u!95 &1254298203
Animator: Animator:
serializedVersion: 5 serializedVersion: 5
@@ -68411,11 +68299,6 @@ MonoBehaviour:
m_InstancedGameObject: {fileID: 0} m_InstancedGameObject: {fileID: 0}
m_Flags: 3 m_Flags: 3
m_ColliderType: 1 m_ColliderType: 1
--- !u!212 &1862079974 stripped
SpriteRenderer:
m_CorrespondingSourceObject: {fileID: 7017725869417428001, guid: 69c66b62d5d42aa48b34c97c6131188f, type: 3}
m_PrefabInstance: {fileID: 1205629222}
m_PrefabAsset: {fileID: 0}
--- !u!213 &1869212074 --- !u!213 &1869212074
Sprite: Sprite:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -73928,27 +73811,11 @@ MonoBehaviour:
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
id: 0 id: 0
monsterName:
level: 0
currentHP: 0
attackPower: 0
defencePower: 10 defencePower: 10
monsterSkillID: 0
patrolRange: 0
detectionRange: 0
chaseRange: 0
speed: 3
attackRange: 0
_spriteRenderer: {fileID: 2041544010} _spriteRenderer: {fileID: 2041544010}
_target: {fileID: 1333310376} _target: {fileID: 1333310376}
_collider: {fileID: 483107484} _collider: {fileID: 483107484}
_hpBarImage: {fileID: 0} _hpBarImage: {fileID: 0}
skillId: 0
skillName:
damage: 0
cooldown: 0
range: 0
animationName:
smallFirePrefab: {fileID: 0} smallFirePrefab: {fileID: 0}
DragonBreathPrefab: {fileID: 0} DragonBreathPrefab: {fileID: 0}
IceBlastPrefab: {fileID: 0} IceBlastPrefab: {fileID: 0}
@@ -73960,7 +73827,6 @@ MonoBehaviour:
WolfPunchPrefab: {fileID: 0} WolfPunchPrefab: {fileID: 0}
DragonShockWavePrefab: {fileID: 0} DragonShockWavePrefab: {fileID: 0}
FireImpactPrefab: {fileID: 0} FireImpactPrefab: {fileID: 0}
DropObjectPrefab: {fileID: 0}
--- !u!95 &2041544005 --- !u!95 &2041544005
Animator: Animator:
serializedVersion: 5 serializedVersion: 5
@@ -77831,4 +77697,3 @@ SceneRoots:
- {fileID: 6994367162197659328} - {fileID: 6994367162197659328}
- {fileID: 9115962474533691980} - {fileID: 9115962474533691980}
- {fileID: 1043803241} - {fileID: 1043803241}
- {fileID: 1205629222}

View File

@@ -21,8 +21,10 @@ namespace TON
public int attackPower; public int attackPower;
// 기본 방어력 // 기본 방어력
public int defencePower; public int defencePower;
// 몬스터 스킬 ID // 몬스터 스킬 ID 1
public int monsterSkillID; public int monsterSkillID;
// 몬스터 스킬 ID 2
public int monsterSkillIDTwo;
// 패트롤 범위 // 패트롤 범위
public float patrolRange; public float patrolRange;
// 인식 범위 // 인식 범위

View File

@@ -12,6 +12,6 @@ namespace TON
public float damage; // 스킬 데미지 public float damage; // 스킬 데미지
public float cooldown; // 스킬 쿨다운 public float cooldown; // 스킬 쿨다운
public float range; // 스킬 범위 public float range; // 스킬 범위
public string animationName; // 스킬 애니메이션 이름 public string prefabName; // 스킬 프리팹 이름
} }
} }

View File

@@ -18,22 +18,6 @@ namespace TON
// _monsterBase.SetTransition(new AttackState()); // _monsterBase.SetTransition(new AttackState());
// _monsterBase.SetTransition(new MonsterSkillState()); // _monsterBase.SetTransition(new MonsterSkillState());
} }
// if (!_monsterBase.monsterSkillID)
// {
// if (other.CompareTag("Player"))
// {
// // 일정 확률로 스킬 사용
// if (Random.value < 0.3f) // 30% 확률
// {
// _monsterBase.SetTransition(new SkillState());
// }
// else
// {
// _monsterBase.SetTransition(new AttackState());
// }
// }
// }
} }
private void OnTriggerExit2D(Collider2D other) private void OnTriggerExit2D(Collider2D other)
@@ -41,7 +25,7 @@ namespace TON
_monsterBase.IsAttacking = false; _monsterBase.IsAttacking = false;
// _monsterBase.SetTransition(new ChasingState()); // _monsterBase.SetTransition(new ChasingState());
Debug.Log("감지 벗어남"); // Debug.Log("감지 벗어남");
} }
} }
} }

View File

@@ -14,51 +14,28 @@ using Vector3 = UnityEngine.Vector3;
namespace TON namespace TON
{ {
// public class AttackPattern
// {
// public void Attack()
// {
//
// }
// }
//
// public class Monster1AttackManager : AttackPattern
// {
// public override void Attack()
// {
//
// }
// }
//
// public class Monster2AttackManager : AttackPattern
// {
// public override void Attack();
// }
public class MonsterBase : MonoBehaviour, IDamage public class MonsterBase : MonoBehaviour, IDamage
{ {
[SerializeField] [SerializeField]
public int id; // 몬스터의 ID public int id; // 몬스터의 ID
public string monsterName; // 몬스터 이름 public float defencePower;
public int level;
public float currentHP = 100; // 몬스터의 현재 체력
public int attackPower; // 공격력
public float defencePower; // 몬스터의 방어력
public int monsterSkillID;
public float patrolRange;
public float detectionRange;
public float chaseRange;
public float speed = 2; // 몬스터의 이동 속도
public float attackRange;
[SerializeField] private SpriteRenderer _spriteRenderer; // 몬스터의 스프라이트 렌더러 [SerializeField] private SpriteRenderer _spriteRenderer; // 몬스터의 스프라이트 렌더러
private MonsterData _monsterData;
private MonsterSkillData _monsterSkillData;
private MonsterSkillData _monsterSkillDataTwo;
private Animator _animator; // 몬스터 애니메이터 private Animator _animator; // 몬스터 애니메이터
StateMachine _stateMachine;
private AttackPattern _attackPattern;
private Vector3 _direction; // 몬스터의 이동 방향 private Vector3 _direction; // 몬스터의 이동 방향
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; } // 몬스터 공격 모션이 끝났는지 여부
[SerializeField] private GameObject _target; // 몬스터의 타겟 [SerializeField] private GameObject _target; // 몬스터의 타겟
@@ -67,26 +44,12 @@ namespace TON
// 애니메이션 관련 선언 // 애니메이션 관련 선언
private string currentAnimationState; // 현재 애니메이션 상태 private string currentAnimationState; // 현재 애니메이션 상태
StateMachine _stateMachine;
// 추적 관련 선언
private float _detectStartTime; // 추적 시작 시간
private bool _isTracking; // 추적 중인지 여부
// hp바 // hp바
[SerializeField] private Image _hpBarImage; // HP 바 이미지 [SerializeField] private Image _hpBarImage; // HP 바 이미지
private float _maxHP; private float _maxHP;
private float currentHP;
// private AttackPattern _attackPatten; // 몬스터 스킬 프리팹
// 스킬
public int skillId; // 스킬 ID
public string skillName; // 스킬 이름
public float damage; // 스킬 데미지
public float cooldown; // 스킬 쿨다운
public float range; // 스킬 범위
public string animationName; // 스킬 애니메이션 이름
public GameObject smallFirePrefab; public GameObject smallFirePrefab;
public GameObject DragonBreathPrefab; public GameObject DragonBreathPrefab;
public GameObject IceBlastPrefab; public GameObject IceBlastPrefab;
@@ -98,59 +61,44 @@ namespace TON
public GameObject WolfPunchPrefab; public GameObject WolfPunchPrefab;
public GameObject DragonShockWavePrefab; public GameObject DragonShockWavePrefab;
public GameObject FireImpactPrefab; public GameObject FireImpactPrefab;
public GameObject DropObjectPrefab;
// 첫 번째 프레임 전에 호출됩니다. // 첫 번째 프레임 전에 호출됩니다.
private void Start() private void Start()
{ {
// 전략 패턴
// _attackPatten = new Monster1AttackManager(); _attackPattern = new Monster1AttackPattern();
// _attackPatten = new Monster2AttackManager(); _attackPattern = new Monster2AttackPattern();
_animator = GetComponent<Animator>(); // 애니메이터 컴포넌트 초기화 _animator = GetComponent<Animator>(); // 애니메이터 컴포넌트 초기화
_stateMachine = new StateMachine(new IdleState(), this); _stateMachine = new StateMachine(new IdleState(), this);
// // 몬스터 데이터 로드 (테스트용, 첫 번째 몬스터 데이터만 로드)
// MonsterData monsterData = MonsterDataManager.Singleton.monstersData[0];
// Debug.Log(monsterData.name); // 몬스터 ID 출력
// 몬스터 데이터 로드 및 적용 // 몬스터 데이터 로드 및 적용
InitializeMonsterData(); InitializeMonsterData();
InitializeMonsterSkillData(); InitializeMonsterSkillData();
id = _monsterData.id;
_direction = new Vector3(1, 0, 0); // 초기 이동 방향 (x 축 양의 방향) _direction = new Vector3(1, 0, 0); // 초기 이동 방향 (x 축 양의 방향)
_spriteRenderer.flipX = !(_direction.x > 0); // 이동 방향에 따라 스프라이트 플립 _spriteRenderer.flipX = !(_direction.x > 0); // 이동 방향에 따라 스프라이트 플립
_collider = GetComponent<Collider2D>(); // 콜라이더 컴포넌트 초기화 _collider = GetComponent<Collider2D>(); // 콜라이더 컴포넌트 초기화
// 몬스터 방어력 임시값 설정
defencePower = 10f;
} }
// TODO : 불러온 값 변수에 대응하게 수정 // TODO : 불러온 값 변수에 대응하게 수정
private void InitializeMonsterData() private void InitializeMonsterData()
{ {
MonsterData monsterData = MonsterDataManager.Singleton.GetMonsterData(id); _monsterData = MonsterDataManager.Singleton.GetMonsterData(id);
if (monsterData != null)
{
id = monsterData.id;
monsterName = monsterData.name;
level = monsterData.level;
currentHP = monsterData.hp;
defencePower = monsterData.defencePower;
monsterSkillID = monsterData.monsterSkillID;;
patrolRange = monsterData.patrolRange;
detectionRange = monsterData.detectionRange;
chaseRange = monsterData.chaseRange;
speed = monsterData.moveSpeed;
attackPower = monsterData.attackPower;
_maxHP = monsterData.hp; if (_monsterData != null)
{
_maxHP = _monsterData.hp;
currentHP = _maxHP; currentHP = _maxHP;
Debug.Log($"몬스터 {monsterData.name} 데이터 로드 완료"); defencePower = _monsterData.defencePower;
Debug.Log($"몬스터 {_monsterData.name} 데이터 로드 완료");
} }
else else
{ {
@@ -161,22 +109,22 @@ namespace TON
// TODO : 불러온 값 변수에 대응하게 수정 // TODO : 불러온 값 변수에 대응하게 수정
private void InitializeMonsterSkillData() private void InitializeMonsterSkillData()
{ {
MonsterSkillData monsterSkillData = MonsterSkillDataManager.Singleton.GetMonsterSkillData(monsterSkillID); _monsterSkillData = MonsterSkillDataManager.Singleton.GetMonsterSkillData(_monsterData.monsterSkillID);
if (_monsterData.monsterSkillIDTwo > -1)
if (monsterSkillData != null)
{ {
skillId = monsterSkillData.skillId; _monsterSkillDataTwo = MonsterSkillDataManager.Singleton.GetMonsterSkillData(_monsterData.monsterSkillIDTwo);
skillName = monsterSkillData.skillName; }
damage = monsterSkillData.damage;
cooldown = monsterSkillData.cooldown;
range = monsterSkillData.range;
animationName = monsterSkillData.animationName;
Debug.Log($"몬스터 {monsterSkillData.skillName} 데이터 로드 완료"); if (_monsterSkillData != null && _monsterSkillDataTwo != null)
{
Debug.Log($"몬스터 {_monsterSkillData.skillName} 데이터 로드 완료");
Debug.Log($"몬스터 {_monsterSkillDataTwo.skillName} 데이터 로드 완료");
} }
else else
{ {
Debug.LogError($"몬스터 스킬 ID {id}에 대한 데이터를 찾을 수 없습니다."); Debug.LogError($"몬스터 스킬 ID {_monsterSkillData.skillId}에 대한 데이터를 찾을 수 없습니다.");
Debug.LogError($"몬스터 스킬 ID {_monsterSkillDataTwo.skillId}에 대한 데이터를 찾을 수 없습니다.");
} }
} }
@@ -241,9 +189,9 @@ namespace TON
// 데미지 계산 (현재 임시 값) // 데미지 계산 (현재 임시 값)
DamageCalculator damageCalculator = new DamageCalculator(); DamageCalculator damageCalculator = new DamageCalculator();
float baseAttack = 30f; // 기본 공격력 float baseAttack = _monsterData.attackPower; // 기본 공격력
float equipmentAttack = 10f; // 장비 공격력 float equipmentAttack = 0; // 장비 공격력
float defense = 0.1f; // 방어력 비율 float defense = _monsterData.defencePower; // 방어력 비율
// 기본 데미지 계산 (치명타 없음) // 기본 데미지 계산 (치명타 없음)
float damage = damageCalculator.CalculateBaseDamage(baseAttack, equipmentAttack, defense); float damage = damageCalculator.CalculateBaseDamage(baseAttack, equipmentAttack, defense);
@@ -265,7 +213,7 @@ namespace TON
public void Move() public void Move()
{ {
transform.Translate(_direction * speed * Time.deltaTime); // 몬스터를 이동시킴 transform.Translate(_direction * _monsterData.moveSpeed * Time.deltaTime); // 몬스터를 이동시킴
} }
public void Chasing() public void Chasing()
@@ -275,7 +223,7 @@ namespace TON
// 타겟이 왼쪽에 있으면 스프라이트를 왼쪽으로, 오른쪽에 있으면 오른쪽으로 바라보도록 설정 // 타겟이 왼쪽에 있으면 스프라이트를 왼쪽으로, 오른쪽에 있으면 오른쪽으로 바라보도록 설정
_spriteRenderer.flipX = target.transform.position.x < transform.position.x; _spriteRenderer.flipX = target.transform.position.x < transform.position.x;
transform.Translate(direction.normalized * speed * Time.deltaTime); // 타겟 방향으로 이동 transform.Translate(direction.normalized * _monsterData.moveSpeed * Time.deltaTime); // 타겟 방향으로 이동
} }
public void MonsterSkillLaunch() public void MonsterSkillLaunch()
@@ -295,7 +243,6 @@ namespace TON
// GameObject newSkill = Instantiate(WolfPunchPrefab); // GameObject newSkill = Instantiate(WolfPunchPrefab);
// GameObject newSkill = Instantiate(DragonShockWavePrefab); // GameObject newSkill = Instantiate(DragonShockWavePrefab);
// GameObject newSkill = Instantiate(FireImpactPrefab); // GameObject newSkill = Instantiate(FireImpactPrefab);
// GameObject newSkill = Instantiate(DropObjectPrefab);
newSkill.transform.position = transform.position + new Vector3(0, 1f, 0); newSkill.transform.position = transform.position + new Vector3(0, 1f, 0);

View File

@@ -33,8 +33,6 @@ namespace TON
private void SetTransition(IState state) private void SetTransition(IState state)
{ {
// 다음음 상태로 전환 // 다음음 상태로 전환
_state = state; _state = state;
_state.Enter(_monsterBase); _state.Enter(_monsterBase);
@@ -68,7 +66,7 @@ namespace TON
private int _walkingTime = 2; // 걷기 시간 private int _walkingTime = 2; // 걷기 시간
private float _duration = 2; private float _duration = 2;
private float _currentDuration = 2; private float _currentDuration;
public void Enter(MonsterBase monsterBase) public void Enter(MonsterBase monsterBase)
@@ -112,7 +110,7 @@ namespace TON
} }
} }
_currentDuration += Time.realtimeSinceStartup; _currentDuration += Time.deltaTime;
} }
public void Exit() public void Exit()
@@ -122,13 +120,13 @@ namespace TON
public IState CheckTransition() public IState CheckTransition()
{ {
// TODO : duration 동안에는 항상 idle = 공격 쿨타운 // duration 동안에는 항상 idle = 공격 쿨타운
if (_currentDuration < _duration) if (_currentDuration < _duration)
return this; return this;
// TODO : 데미지 받을 때 // TODO : 데미지 받을 때
// TODO : 추적 범위에 들어왔을 때 // 추적 범위에 들어왔을 때
if (_monsterBase.IsDetect) if (_monsterBase.IsDetect)
{ {
return new ChasingState(); return new ChasingState();
@@ -169,8 +167,8 @@ namespace TON
// Idle로 변경 // Idle로 변경
if(_monsterBase.IsDetect== false) if(_monsterBase.IsDetect== false)
return new IdleState(); return new IdleState();
//
// // Attack으로 변경 // Attack으로 변경
if (_monsterBase.IsAttacking) if (_monsterBase.IsAttacking)
return new AttackState(); return new AttackState();
@@ -180,13 +178,11 @@ namespace TON
} }
} }
// 몬스터 1의 어택 // 몬스터 1의 어택(스킬 1개를 가진 중보스)
// 몬스터 2의 어택 // 몬스터 2의 어택(스킬 2개를 가진 보스)
public class AttackState : IState public class AttackState : IState
{ {
private const string AniAttack = "Attack"; // 공격 애니메이션 private const string AniAttack = "Attack"; // 공격 애니메이션
private const string AniIdle = "Idle"; // 대기 애니메이션
private MonsterBase _monsterBase; private MonsterBase _monsterBase;
private float _attackDelayTime = 2f; // 공격 딜레이 시간 private float _attackDelayTime = 2f; // 공격 딜레이 시간
private float _lastAttackTime; // 마지막 공격 시간 private float _lastAttackTime; // 마지막 공격 시간
@@ -227,7 +223,6 @@ namespace TON
{ {
_monsterBase.ChangeAnimationState(AniAttack); _monsterBase.ChangeAnimationState(AniAttack);
_monsterBase.PlayerAttack(); _monsterBase.PlayerAttack();
} }
public void Exit() public void Exit()
@@ -243,7 +238,7 @@ namespace TON
return this; return this;
} }
} }
// TODO : HIT, Death 상태 추가
public class MonsterSkillState : IState public class MonsterSkillState : IState
{ {
private const string AniAttack = "Attack"; // 공격 애니메이션 private const string AniAttack = "Attack"; // 공격 애니메이션