DEG-100-원거리-마법사-보스-몬스터-개발-단계-2 #8

Merged
FioreFlower merged 5 commits from DEG-100-원거리-마법사-보스-몬스터-개발-단계-2 into main 2025-05-01 06:43:11 +00:00
2 changed files with 41 additions and 15 deletions
Showing only changes of commit a70eb420a0 - Show all commits

BIN
Assets/JYY/Scenes/MonsterTest.unity (Stored with Git LFS)

Binary file not shown.

View File

@ -17,6 +17,10 @@ public class CasterDemonController : EnemyController
[SerializeField] private GameObject magicMissilePrefab; [SerializeField] private GameObject magicMissilePrefab;
[SerializeField] private GameObject teleportEffectPrefab; [SerializeField] private GameObject teleportEffectPrefab;
[Header("각종 데미지 이펙트 세트")]
[SerializeField] private GameObject chariotWarning;
[SerializeField] private GameObject chariotEffect;
private float _teleportDistance = 4f; // 플레이어 뒤로 떨어질 거리 private float _teleportDistance = 4f; // 플레이어 뒤로 떨어질 거리
// 텔레포트 쿨타임 // 텔레포트 쿨타임
@ -49,7 +53,7 @@ public class CasterDemonController : EnemyController
_doneBattleSequence = false; _doneBattleSequence = false;
// TODO : 배틀 중일 때 루프 // TODO : 배틀 중일 때 루프
Debug.Log("## 몬스터의 교전 행동 루프"); // Debug.Log("## 몬스터의 교전 행동 루프");
Thinking(); Thinking();
} }
} }
@ -147,23 +151,45 @@ public class CasterDemonController : EnemyController
if (teleportEffectPrefab != null) if (teleportEffectPrefab != null)
Instantiate(teleportEffectPrefab, startPos, Quaternion.identity); Instantiate(teleportEffectPrefab, startPos, Quaternion.identity);
// 플레이어 뒤쪽 위치 계산 // 텔레포트와 함께 시전하는 범위 공격
Vector3 playerPos = TraceTargetTransform.position; var aoe = Instantiate(chariotWarning, startPos, Quaternion.identity).GetComponent<ChariotAoeController>();
Vector3 behindDir = -TraceTargetTransform.forward;
Vector3 targetPos = playerPos + behindDir.normalized * _teleportDistance;
// NavMesh 유효 위치 확인 var effectData = new DamageEffectData
Vector3 finalPos = targetPos;
if (NavMesh.SamplePosition(targetPos, out NavMeshHit hit, 1f, NavMesh.AllAreas))
{ {
finalPos = hit.position; damage = (int)attackPower,
} radius = 10,
delay = 1.5f,
targetLayer = TargetLayerMask,
explosionEffectPrefab = chariotEffect
};
// 텔레포트 실행 aoe.SetEffect(effectData, null, null);
Agent.Warp(finalPos);
// // 플레이어 뒤쪽 위치 계산
// Vector3 playerPos = TraceTargetTransform.position;
// Vector3 behindDir = -TraceTargetTransform.forward;
// Vector3 targetPos = playerPos + behindDir.normalized * _teleportDistance;
//
// // NavMesh 유효 위치 확인
// Vector3 finalPos = targetPos;
// if (NavMesh.SamplePosition(targetPos, out NavMeshHit hit, 1f, NavMesh.AllAreas))
// {
// finalPos = hit.position;
// }
//
// // 텔레포트 실행
// Agent.Warp(finalPos);
//
// if (teleportEffectPrefab != null)
// Instantiate(teleportEffectPrefab, finalPos, Quaternion.identity);
// 중앙으로 이동
Agent.Warp(Vector3.zero);
if (teleportEffectPrefab != null) if (teleportEffectPrefab != null)
Instantiate(teleportEffectPrefab, finalPos, Quaternion.identity); Instantiate(teleportEffectPrefab, Vector3.zero, Quaternion.identity);
} }
private void SetSequence(IEnumerator newSequence) private void SetSequence(IEnumerator newSequence)