diff --git a/Assets/JYY/Prefabs/Bullets.meta b/Assets/JYY/Prefabs/Bullets.meta new file mode 100644 index 00000000..760b6a99 --- /dev/null +++ b/Assets/JYY/Prefabs/Bullets.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 37e30a87d9c904c898232118c82b5fbc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/JYY/Prefabs/Bullets/Dummy Magic Missaile.prefab b/Assets/JYY/Prefabs/Bullets/Dummy Magic Missaile.prefab new file mode 100644 index 00000000..7a7770e6 --- /dev/null +++ b/Assets/JYY/Prefabs/Bullets/Dummy Magic Missaile.prefab @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1b880c281eae23192aec88f2cdc857d261f1b7542d69ca291348ce67ce506ba0 +size 3412 diff --git a/Assets/JYY/Prefabs/Bullets/Dummy Magic Missaile.prefab.meta b/Assets/JYY/Prefabs/Bullets/Dummy Magic Missaile.prefab.meta new file mode 100644 index 00000000..5f83d1a3 --- /dev/null +++ b/Assets/JYY/Prefabs/Bullets/Dummy Magic Missaile.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9c16b44c8736e4007ad5f0733ce433e1 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/JYY/Scenes/MonsterTest.unity b/Assets/JYY/Scenes/MonsterTest.unity index d772a68e..78f82a45 100644 --- a/Assets/JYY/Scenes/MonsterTest.unity +++ b/Assets/JYY/Scenes/MonsterTest.unity @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:efc792ecb073a66263abf936bd751584b41224bde07c7f02418d10223d0c07f4 -size 22331 +oid sha256:2084d36f9ac1250a6302039da5967f6de70b091c45d35a003fb94c10f8c24a2c +size 23771 diff --git a/Assets/Scripts/Character/Enemy/Bullet/BulletBase.cs b/Assets/Scripts/Character/Enemy/Bullet/BulletBase.cs index 2396961b..d3c1a9e9 100644 --- a/Assets/Scripts/Character/Enemy/Bullet/BulletBase.cs +++ b/Assets/Scripts/Character/Enemy/Bullet/BulletBase.cs @@ -57,6 +57,8 @@ public class BulletBase : MonoBehaviour private void OnTriggerEnter(Collider other) { + // TODO: 주인공 캐릭터를 찾는 로직 추가 필요 + // 주인공 스크립트를 찾아 처리할 것. var character = other.GetComponent(); if (character != null) { diff --git a/Assets/Scripts/Character/Enemy/Bullet/MagicMissaile.cs b/Assets/Scripts/Character/Enemy/Bullet/MagicMissile.cs similarity index 63% rename from Assets/Scripts/Character/Enemy/Bullet/MagicMissaile.cs rename to Assets/Scripts/Character/Enemy/Bullet/MagicMissile.cs index 541c9c41..0965588b 100644 --- a/Assets/Scripts/Character/Enemy/Bullet/MagicMissaile.cs +++ b/Assets/Scripts/Character/Enemy/Bullet/MagicMissile.cs @@ -2,7 +2,7 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; -public class MagicMissaile : BulletBase +public class MagicMissile : BulletBase { } diff --git a/Assets/Scripts/Character/Enemy/Bullet/MagicMissaile.cs.meta b/Assets/Scripts/Character/Enemy/Bullet/MagicMissile.cs.meta similarity index 100% rename from Assets/Scripts/Character/Enemy/Bullet/MagicMissaile.cs.meta rename to Assets/Scripts/Character/Enemy/Bullet/MagicMissile.cs.meta diff --git a/Assets/Scripts/Character/Enemy/CasterDemonController.cs b/Assets/Scripts/Character/Enemy/CasterDemonController.cs index fe436f8d..07d6b87c 100644 --- a/Assets/Scripts/Character/Enemy/CasterDemonController.cs +++ b/Assets/Scripts/Character/Enemy/CasterDemonController.cs @@ -8,6 +8,7 @@ public class CasterDemonController : EnemyController private bool _isFirstNoPath = true; [SerializeField] private Transform teleportTransform; + [SerializeField] private Transform bulletShotPosition; [SerializeField] private GameObject magicMissilePrefab; public override void BattleSequence() @@ -20,9 +21,8 @@ public class CasterDemonController : EnemyController // TODO : 배틀 중일 때 루프 Debug.Log("## 몬스터의 교전 행동 루프"); + StartCoroutine(ShotMagicMissile()); - // 전투 행동이 끝남 - _doneBattleSequence = true; } } @@ -39,15 +39,54 @@ public class CasterDemonController : EnemyController } } - private void ShotMagicMissile() + private IEnumerator ShotMagicMissile() { - this.transform.LookAt(TraceTargetTransform.position); + for (int i = 0; i < 3; i++) + { + // 1. 기본 위치 + Vector3 basePos = TraceTargetTransform.position; + Vector3 aimPosition = basePos; + + // 2. 플레이어 Rigidbody로 속도 얻기 + if (TraceTargetTransform.TryGetComponent(out var rb)) + { + // 아주 짧은 시간만 예측 + float predictionTime = 0.3f; + aimPosition += rb.velocity * predictionTime; + } + + // 높이는 변경할 필요 없음 + float fixedY = bulletShotPosition.position.y; + aimPosition.y = fixedY; + + // 3. 그 위치를 바라보고 + transform.LookAt(aimPosition); + + // 4. 미사일 생성 및 초기화 + var missile = Instantiate( + magicMissilePrefab, + bulletShotPosition.position, + transform.rotation + ); + missile.GetComponent() + .Initialize(new BulletData(aimPosition, 5f, 10f, 5f)); + + yield return new WaitForSeconds(0.4f); + } + + // 짧은 텀 후 끝내기 + yield return new WaitForSeconds(1f); + _doneBattleSequence = true; } + + private void Teleport() { } + + }