From 50e5b8db98314ab4a357c0f9e1991de3a98f68fd Mon Sep 17 00:00:00 2001 From: Fiore Date: Tue, 29 Apr 2025 14:00:03 +0900 Subject: [PATCH] =?UTF-8?q?feat=20:=20=EB=A7=A4=EC=A7=81=EB=AF=B8=EC=82=AC?= =?UTF-8?q?=EC=9D=BC=20=EA=B8=B0=EB=B3=B8=20=EB=8F=99=EC=9E=91=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 플레이어가 움직이는 방향을 참고하여 예측샷 발사 --- Assets/JYY/Prefabs/Bullets.meta | 8 ++++ .../Bullets/Dummy Magic Missaile.prefab | 3 ++ .../Bullets/Dummy Magic Missaile.prefab.meta | 7 +++ Assets/JYY/Scenes/MonsterTest.unity | 4 +- .../Character/Enemy/Bullet/BulletBase.cs | 2 + .../{MagicMissaile.cs => MagicMissile.cs} | 2 +- ...cMissaile.cs.meta => MagicMissile.cs.meta} | 0 .../Character/Enemy/CasterDemonController.cs | 47 +++++++++++++++++-- 8 files changed, 66 insertions(+), 7 deletions(-) create mode 100644 Assets/JYY/Prefabs/Bullets.meta create mode 100644 Assets/JYY/Prefabs/Bullets/Dummy Magic Missaile.prefab create mode 100644 Assets/JYY/Prefabs/Bullets/Dummy Magic Missaile.prefab.meta rename Assets/Scripts/Character/Enemy/Bullet/{MagicMissaile.cs => MagicMissile.cs} (63%) rename Assets/Scripts/Character/Enemy/Bullet/{MagicMissaile.cs.meta => MagicMissile.cs.meta} (100%) 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() { } + + }