diff --git a/Gameton-06/Assets/Gameton/Scripts/GameData/MonsterData.cs b/Gameton-06/Assets/Gameton/Scripts/GameData/MonsterData.cs index 9db0383a..b6e5c677 100644 --- a/Gameton-06/Assets/Gameton/Scripts/GameData/MonsterData.cs +++ b/Gameton-06/Assets/Gameton/Scripts/GameData/MonsterData.cs @@ -21,6 +21,8 @@ namespace TON public int defencePower; // 몬스터 스킬 ID public int monsterSkillID; + // 몬스터 스킬 ID Two + public int monsterSkillIDTwo; // 골드 public int Gold; // 경험치 diff --git a/Gameton-06/Assets/Gameton/Scripts/Monster/MonsterBase.cs b/Gameton-06/Assets/Gameton/Scripts/Monster/MonsterBase.cs index b9a5d9f8..0ae3ba1e 100644 --- a/Gameton-06/Assets/Gameton/Scripts/Monster/MonsterBase.cs +++ b/Gameton-06/Assets/Gameton/Scripts/Monster/MonsterBase.cs @@ -19,6 +19,8 @@ namespace TON private PlayerData _playerData; private MonsterData _monsterData; + private MonsterSkillData _monsterSkillData; + private MonsterSkillData _monsterSkillDataTwo; private Animator _animator; // 몬스터 애니메이터 private string currentAnimationState; // 현재 애니메이션 상태 private float moveSpeed = 2f; @@ -39,6 +41,19 @@ namespace TON // public AudioClip _attackSound; public AudioClip _deathSound; public AudioClip _hitSound; + + // 몬스터 스킬 프리팹 + public GameObject smallFirePrefab; + public GameObject DragonBreathPrefab; + public GameObject IceBlastPrefab; + public GameObject PumpkinCrashPrefab; + public GameObject TrollChargePrefab; + public GameObject TrollCrashPrefab; + public GameObject TrollThundePrefab; + public GameObject WolfEnergyWavePrefab; + public GameObject WolfPunchPrefab; + public GameObject DragonShockWavePrefab; + public GameObject FireImpactPrefab; private void Start() { @@ -152,7 +167,7 @@ namespace TON } } - public void Attack() + public void Attack(GameObject player) { // 데미지 계산 (현재 임시 값) DamageCalculator damageCalculator = new DamageCalculator(); @@ -169,6 +184,12 @@ namespace TON // SoundManager.instance.SFXPlay("Attack", _attackSound); // Debug.Log($" 몬스터 공격! 최종 데미지: {damage}"); // 데미지 출력 } + + public void PlayerAttack() + { + var target = GameObject.FindGameObjectWithTag("Player"); + Attack(target); + } public void SetOppositionDirection() { @@ -201,5 +222,79 @@ namespace TON SoundManager.instance.SFXPlay("Death", _deathSound); Destroy(gameObject); // 몬스터 파괴 } + + public void MonsterSkillLaunch(int skillNumber = 1) + { + try + { + var target = GameObject.FindGameObjectWithTag("Player"); + if (target == null) + { + Debug.LogWarning("타겟을 찾을 수 없습니다!"); + return; + } + + _spriteRenderer.flipX = target.transform.position.x < transform.position.x; + + MonsterSkillData skillData = skillNumber == 1 ? _monsterSkillData : _monsterSkillDataTwo; + if (skillData == null) + { + Debug.LogError($"스킬 데이터를 찾을 수 없습니다. SkillNumber: {skillNumber}"); + return; + } + + GameObject skillPrefab = GetSkillPrefab(skillData.skillId); + if (skillPrefab == null) + { + Debug.LogError($"스킬 프리팹을 찾을 수 없습니다. SkillID: {skillData.skillId}"); + return; + } + + GameObject newSkill = Instantiate(skillPrefab, transform.position + new Vector3(0, 1f, 0), Quaternion.identity); + MonsterSkill monsterSkill = newSkill.GetComponent(); + if (monsterSkill != null) + { + monsterSkill.Initialize(this, skillData); + } + } + catch (System.Exception e) + { + Debug.LogError($"스킬 발사 중 오류 발생: {e.Message}"); + } + } + + private GameObject GetSkillPrefab(int skillId) + { + // skillId에 따라 적절한 프리팹 반환 + switch (skillId) + { + case 1: return smallFirePrefab; + case 2: return DragonBreathPrefab; + case 3: return IceBlastPrefab; + case 4: return PumpkinCrashPrefab; + case 5: return TrollChargePrefab; + case 6: return TrollCrashPrefab; + case 7: return TrollThundePrefab; + case 8: return WolfEnergyWavePrefab; + case 9: return WolfPunchPrefab; + case 10: return DragonShockWavePrefab; + case 11: return FireImpactPrefab; + + default: return null; + } + } + + public float GetSkillCooldown(int skillNumber) + { + if (skillNumber == 1 && _monsterSkillData != null) + { + return _monsterSkillData.cooldown; + } + else if (skillNumber == 2 && _monsterSkillDataTwo != null) + { + return _monsterSkillDataTwo.cooldown; + } + return 5f; // 기본 쿨다운 + } } } \ No newline at end of file diff --git a/Gameton-06/Assets/Gameton/Scripts/Monster/StateMachine.cs b/Gameton-06/Assets/Gameton/Scripts/Monster/StateMachine.cs index 80fca6c0..a0bc6e5d 100644 --- a/Gameton-06/Assets/Gameton/Scripts/Monster/StateMachine.cs +++ b/Gameton-06/Assets/Gameton/Scripts/Monster/StateMachine.cs @@ -208,7 +208,7 @@ namespace TON private void Attack() { _monsterBase.ChangeAnimationState(AniAttack); - _monsterBase.Attack(); + _monsterBase.PlayerAttack(); } public void Exit()