diff --git a/Assets/JAY/Scripts/PlayerController.cs b/Assets/JAY/Scripts/PlayerController.cs index 14b2319b..694b5fe4 100644 --- a/Assets/JAY/Scripts/PlayerController.cs +++ b/Assets/JAY/Scripts/PlayerController.cs @@ -56,6 +56,10 @@ public class PlayerController : CharacterBase, IObserver Joystick = FindObjectOfType(); } + // isBattle 초기화 (임시) + bool isHousingScene = SceneManager.GetActiveScene().name.Contains("Housing"); + _isBattle = !isHousingScene; + AssignCharacterController(); AssignAnimator(); } @@ -67,13 +71,6 @@ public class PlayerController : CharacterBase, IObserver hitEffectController = GetComponentInChildren(); PlayerInit(); - - // isBattle 초기화 (임시) - /*bool isHousingScene = SceneManager.GetActiveScene().name.Contains("Housing"); - _isBattle = !isHousingScene; - Debug.Log("_isBattle: " + _isBattle);*/ - - SwitchBattleMode(); } private void Update() @@ -96,7 +93,9 @@ public class PlayerController : CharacterBase, IObserver // 공격 입력 처리 if (Input.GetKeyDown(KeyCode.X) && (_currentAction == null || !_currentAction.IsActive) - && (CurrentState != PlayerState.Win && CurrentState != PlayerState.Dead)) { + && (CurrentState != PlayerState.Win && CurrentState != PlayerState.Dead)) + { + GameManager.Instance.PlayPlayerAttackSound(); StartAttackAction(); } @@ -400,6 +399,7 @@ public class PlayerController : CharacterBase, IObserver if (character != this) return; if (CurrentState == PlayerState.Dead) return; + GameManager.Instance.PlayPlayerHitSound(); SetState(PlayerState.Hit); } diff --git a/Assets/JYY/Prefabs/Alien Big Blink.prefab b/Assets/JYY/Prefabs/Alien Big Blink.prefab index d304ab87..be137b6b 100644 --- a/Assets/JYY/Prefabs/Alien Big Blink.prefab +++ b/Assets/JYY/Prefabs/Alien Big Blink.prefab @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7260a373cb87c8a3b3f422c0a78f3245874c6b5106186a117e8db270c7750329 -size 71241 +oid sha256:83da6d33fb85764ae3dc4117b179be2ffaa26e9a85492b7c25cffbe27e190e80 +size 72053 diff --git a/Assets/JYY/Prefabs/[Enemy] PldDog.prefab b/Assets/JYY/Prefabs/[Enemy] PldDog.prefab index 9eb356ef..37a7637f 100644 --- a/Assets/JYY/Prefabs/[Enemy] PldDog.prefab +++ b/Assets/JYY/Prefabs/[Enemy] PldDog.prefab @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fa57e55a6b7dc452a770a0a0ddb528ffa765818ec608bcb60f14e4e984a18e59 -size 79971 +oid sha256:1165af38c479c1d7bd41a952853e09bf33f6d19a62851b74edc106c49eae80e8 +size 80646 diff --git a/Assets/KSH/DungeonLogic.cs b/Assets/KSH/DungeonLogic.cs index b870d546..1bc28af7 100644 --- a/Assets/KSH/DungeonLogic.cs +++ b/Assets/KSH/DungeonLogic.cs @@ -10,6 +10,9 @@ public class DungeonLogic : MonoBehaviour [NonSerialized] public bool isCompleted = false; // 던전 클리어 여부 [NonSerialized] public bool isFailed = false; // 던전 실패 여부 + [SerializeField] private List bossPrefabs; + [SerializeField] private Transform spawnPosition; // 보스가 스폰될 위치 + private PlayerController _player; private EnemyController _enemy; @@ -17,11 +20,15 @@ public class DungeonLogic : MonoBehaviour public event Action OnDungeonSuccess; public event Action OnDungeonFailure; + private void Awake() + { + SpawnBossForCurrentStage(); + } + private void Start() { // tag를 통해 할당 / 추후 플레이어와 에너미 태그 추가 필요 _player = GameObject.FindGameObjectWithTag("Player").GetComponent(); - _enemy = GameObject.FindGameObjectWithTag("Enemy").GetComponent(); // 죽음 이벤트 구독 if (_player != null) @@ -29,11 +36,23 @@ public class DungeonLogic : MonoBehaviour _player.OnGetHit += OnPlayerGetHit; _player.OnDeath += OnPlayerDeath; } + } + + private void SpawnBossForCurrentStage() + { + int currentStage = GameManager.Instance.StageLevel; - if (_enemy != null) + if (currentStage <= bossPrefabs.Count && currentStage > 0) { - _enemy.OnGetHit += OnEnemyGetHit; - _enemy.OnDeath += OnEnemyDeath; + GameObject bossPrefab = bossPrefabs[currentStage - 1]; + GameObject bossObj = Instantiate(bossPrefab, spawnPosition.position, Quaternion.identity); + _enemy = bossObj.GetComponent(); + + if (_enemy != null) + { + _enemy.OnGetHit += OnEnemyGetHit; + _enemy.OnDeath += OnEnemyDeath; + } } } @@ -52,6 +71,8 @@ public class DungeonLogic : MonoBehaviour private void OnEnemyGetHit(CharacterBase enemy) { + Debug.Log("enemyGETHIT"); + if (isFailed || isCompleted) return; // TODO: 에너미 피격 효과음 @@ -92,8 +113,9 @@ public class DungeonLogic : MonoBehaviour _player.SetState(PlayerState.Win); // TODO: 강화 시스템으로 넘어가고 일상 맵으로 이동 + GameManager.Instance.PanelManager.GetPanel("ClearPanelBG"); - StartCoroutine(DelayedSceneChange()); // 3초 대기 후 전환 + StartCoroutine(DelayedSceneChange()); // 5초 대기 후 전환 } } @@ -112,13 +134,15 @@ public class DungeonLogic : MonoBehaviour _player.gameObject.layer = LayerMask.NameToLayer("Ignore Raycast"); _enemy.SetState(EnemyState.Idle); - StartCoroutine(DelayedSceneChange()); // 3초 대기 후 전환 + GameManager.Instance.PanelManager.GetPanel("FailedPanelBG"); + + StartCoroutine(DelayedSceneChange()); // 5초 대기 후 전환 } } private IEnumerator DelayedSceneChange() { - yield return new WaitForSeconds(3f); + yield return new WaitForSeconds(5f); GameManager.Instance.ChangeToHomeScene(); } diff --git a/Assets/PIH/Assets.meta b/Assets/KSH/ReDungeon.meta similarity index 77% rename from Assets/PIH/Assets.meta rename to Assets/KSH/ReDungeon.meta index 906b8c3b..a98b6b0d 100644 --- a/Assets/PIH/Assets.meta +++ b/Assets/KSH/ReDungeon.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 103d1c060596bdd4bbe4361b2d571cdd +guid: 4193e9c8c0cfacb48ac9b3d855367a0c folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/KSH/ReDungeon.unity b/Assets/KSH/ReDungeon.unity new file mode 100644 index 00000000..36b826ee --- /dev/null +++ b/Assets/KSH/ReDungeon.unity @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6073557e3f1e9b377c14c5b9a1284a3882642b13f32bfbc22bf38664308853dd +size 2417036 diff --git a/Assets/PIH/Assets/RpgBgmDungeon.meta b/Assets/KSH/ReDungeon.unity.meta similarity index 67% rename from Assets/PIH/Assets/RpgBgmDungeon.meta rename to Assets/KSH/ReDungeon.unity.meta index 07a2c7d2..52b8eb92 100644 --- a/Assets/PIH/Assets/RpgBgmDungeon.meta +++ b/Assets/KSH/ReDungeon.unity.meta @@ -1,6 +1,5 @@ fileFormatVersion: 2 -guid: 14ced887e59fe2247ad5ac97a92b7003 -folderAsset: yes +guid: b7412a4a2ee433447afcb28700cb50a9 DefaultImporter: externalObjects: {} userData: diff --git a/Assets/KSH/ReDungeon/NavMesh-Ground.asset b/Assets/KSH/ReDungeon/NavMesh-Ground.asset new file mode 100644 index 00000000..e9bc392b Binary files /dev/null and b/Assets/KSH/ReDungeon/NavMesh-Ground.asset differ diff --git a/Assets/KSH/ReDungeon/NavMesh-Ground.asset.meta b/Assets/KSH/ReDungeon/NavMesh-Ground.asset.meta new file mode 100644 index 00000000..13c917a3 --- /dev/null +++ b/Assets/KSH/ReDungeon/NavMesh-Ground.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 75d6602e946891641821809218b5ccb8 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 23800000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/KSH/ReHousing.unity b/Assets/KSH/ReHousing.unity index e9025304..cde651e5 100644 --- a/Assets/KSH/ReHousing.unity +++ b/Assets/KSH/ReHousing.unity @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b3f305cf446df76596f25e4ba247f35283cfba1441d7b2da7bfc3dcce6811e0a -size 607385 +oid sha256:1e9daf08bc580a9cb7b3458cc1aaa4a227710db9eb5fcb2838a14eeff8938a22 +size 608530 diff --git a/Assets/LYM/Scripts/PanelManager.cs b/Assets/LYM/Scripts/PanelManager.cs index ef209214..8b4d1478 100644 --- a/Assets/LYM/Scripts/PanelManager.cs +++ b/Assets/LYM/Scripts/PanelManager.cs @@ -2,20 +2,23 @@ using System; using System.Collections; using System.Collections.Generic; using UnityEngine; +using UnityEngine.SceneManagement; -public class PanelManager : MonoBehaviour +public class PanelManager : Singleton { private Canvas _canvas; private Dictionary _panels = new Dictionary(); - private void Awake() + private void Start() { - if (_canvas == null) - { - _canvas = GameObject.Find("Canvas").GetComponent(); - } + FindCanvas(); LoadPanels(); } + + private void FindCanvas() + { + _canvas = GameObject.Find("Canvas").GetComponent(); + } //패널을 딕셔너리에 오브젝트 이름으로 로드 private void LoadPanels() @@ -27,9 +30,12 @@ public class PanelManager : MonoBehaviour _panels[prefab.name] = prefab; } } + //패널 이름을 딕셔너리 키로 찾음 public GameObject GetPanel(string panelName) { + if(_canvas == null) FindCanvas(); + if (_panels.TryGetValue(panelName, out GameObject prefab)) { return Instantiate(prefab, _canvas.transform); @@ -41,4 +47,5 @@ public class PanelManager : MonoBehaviour return null; } + protected override void OnSceneLoaded(Scene scene, LoadSceneMode mode) { } } diff --git a/Assets/LYM/Scripts/SettingsPanelController.cs b/Assets/LYM/Scripts/SettingsPanelController.cs index 602f5845..f9e551dd 100644 --- a/Assets/LYM/Scripts/SettingsPanelController.cs +++ b/Assets/LYM/Scripts/SettingsPanelController.cs @@ -36,24 +36,38 @@ public class SettingsPanelController : PanelController public void SFXSliderButtonClicked() { sfxSliderButton.OnClicked(); - //todo: sfxSliderButton.IsActive를 기준으로 뮤트 여부 확인 및 뮤트 적용 + ApplySFXSettings(sfxSliderButton.IsActive, sfxSlider.value); } public void BGMSliderButtonClicked() { bgmSliderButton.OnClicked(); - //todo: sfxSliderButton.IsActive를 기준으로 뮤트 여부 확인 및 뮤트 적용 + ApplyBGMSettings(bgmSliderButton.IsActive, bgmSlider.value); } //슬라이더 변경 시 마다 호출 public void OnSFXSliderValueChanged(float value) { - //todo: 소리 볼륨 조절 + ApplySFXSettings(sfxSliderButton.IsActive, value); } public void OnBGMSliderValueChanged(float value) { - //todo: 소리 볼륨 조절 + ApplyBGMSettings(bgmSliderButton.IsActive, value); + } + + // 효과음 설정 적용 메서드 + private void ApplySFXSettings(bool isActive, float volume) + { + float actualVolume = isActive ? volume : 0f; + SoundManager.Instance.SetSFXVolume(actualVolume); + } + + // 배경음 설정 적용 메서드 + private void ApplyBGMSettings(bool isActive, float volume) + { + float actualVolume = isActive ? volume : 0f; + SoundManager.Instance.SetBGMVolume(actualVolume); } public void OnCloseButtonClicked() diff --git a/Assets/PIH/Assets/RpgBgmDungeon/RPG_Dungeon.wav b/Assets/PIH/Assets/RpgBgmDungeon/RPG_Dungeon.wav deleted file mode 100644 index bd9046d4..00000000 --- a/Assets/PIH/Assets/RpgBgmDungeon/RPG_Dungeon.wav +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:934f1dc1b307103993d18b23f592b5455ca5ffff715304b0317caf8b00f30af9 -size 8130484 diff --git a/Assets/PIH/Assets/RpgBgmDungeon/RPG_Dungeon.wav.meta b/Assets/PIH/Assets/RpgBgmDungeon/RPG_Dungeon.wav.meta deleted file mode 100644 index ccce3f9e..00000000 --- a/Assets/PIH/Assets/RpgBgmDungeon/RPG_Dungeon.wav.meta +++ /dev/null @@ -1,24 +0,0 @@ -fileFormatVersion: 2 -guid: 6278383b82513424bb58a3faeeb8a9db -timeCreated: 1545638758 -licenseType: Store -AudioImporter: - externalObjects: {} - serializedVersion: 6 - defaultSettings: - loadType: 0 - sampleRateSetting: 0 - sampleRateOverride: 44100 - compressionFormat: 1 - quality: 1 - conversionMode: 0 - platformSettingOverrides: {} - forceToMono: 0 - normalize: 1 - preloadAudioData: 1 - loadInBackground: 0 - ambisonic: 0 - 3D: 1 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Common/GameManager.cs b/Assets/Scripts/Common/GameManager.cs index 91b07280..a02bb9d3 100644 --- a/Assets/Scripts/Common/GameManager.cs +++ b/Assets/Scripts/Common/GameManager.cs @@ -6,8 +6,6 @@ using UnityEngine.SceneManagement; public partial class GameManager : Singleton { - private Canvas _canvas; - // 게임 진행 상태 private int currentDay = 1; // 날짜 public int CurrentDay => currentDay; @@ -66,12 +64,14 @@ public partial class GameManager : Singleton public void ChangeToGameScene() { - SceneManager.LoadScene("DungeonTestScene"); // 던전 Scene + SceneManager.LoadScene("ReDungeon"); // 던전 Scene + HandleSceneAudio("Dungeon"); } public void ChangeToHomeScene() { SceneManager.LoadScene("ReHousing"); // Home Scene + HandleSceneAudio("Housing"); } // TODO: Open Setting Panel 등 Panel 처리 diff --git a/Assets/Scripts/Common/GameUtility/GameSound.cs b/Assets/Scripts/Common/GameUtility/GameSound.cs index ff3e9f02..13159b5d 100644 --- a/Assets/Scripts/Common/GameUtility/GameSound.cs +++ b/Assets/Scripts/Common/GameUtility/GameSound.cs @@ -32,7 +32,7 @@ public partial class GameManager [SerializeField] private AudioClip victorySFX; [Header("플레이어 전투 효과음")] - [SerializeField] private AudioClip housingFootstepSFX; + [SerializeField] private AudioClip playerHitSFX; [SerializeField] private AudioClip dungeonFootstepSFX; [SerializeField] private AudioClip playerAttackSFX; @@ -85,7 +85,7 @@ public partial class GameManager if (sleepingSFX != null) SafeSoundManager?.LoadAudioClip("Sleeping", sleepingSFX); // 플레이어 전투 효과음 등록 - if (housingFootstepSFX != null) SafeSoundManager?.LoadAudioClip("HousingFootstep", housingFootstepSFX); + if (playerHitSFX != null) SafeSoundManager?.LoadAudioClip("PlayerHit", playerHitSFX); if (dungeonFootstepSFX != null) SafeSoundManager?.LoadAudioClip("DungeonFootstep", dungeonFootstepSFX); if (playerAttackSFX != null) SafeSoundManager?.LoadAudioClip("PlayerAttack", playerAttackSFX); @@ -154,7 +154,7 @@ public partial class GameManager { targetScene = "Housing"; } - else if (sceneName.Contains("Game")) + else if (sceneName.Contains("Dungeon")) { targetScene = "Game"; } @@ -173,6 +173,7 @@ public partial class GameManager { SafeSoundManager?.PlayBGM(bgmClip, true, 1.5f); currentBGMTrack = targetScene; + wasPlayingBGM = true; } } } @@ -223,6 +224,12 @@ public partial class GameManager public void PlayInteractionSound(ActionType actionType) { + if (sceneBGMMap.TryGetValue(currentBGMTrack, out AudioClip bgmClip)) + { + previousBGMClip = bgmClip; + wasPlayingBGM = true; + } + // 배경음 중지 (페이드아웃) SafeSoundManager?.StopBGM(true, 0.5f); @@ -301,9 +308,9 @@ public partial class GameManager #region 플레이어 전투 효과음 제어 - public void PlayHousingFootstepSound() + public void PlayPlayerHitSound() { - SafeSoundManager?.PlaySFX("HousingFootstep"); + SafeSoundManager?.PlaySFX("PlayerHit"); } public void PlayDungeonFootstepSound() diff --git a/Assets/Scripts/Common/SoundManager.cs b/Assets/Scripts/Common/SoundManager.cs index d3e04005..6c6acee3 100644 --- a/Assets/Scripts/Common/SoundManager.cs +++ b/Assets/Scripts/Common/SoundManager.cs @@ -23,7 +23,7 @@ public class SoundManager : Singleton // 페이드 효과 진행 여부 private bool isFading = false; - private void Awake() + private void Start() { InitializeAudioSources(); } diff --git a/ProjectSettings/EditorBuildSettings.asset b/ProjectSettings/EditorBuildSettings.asset index a6e8a34f..f982c05c 100644 --- a/ProjectSettings/EditorBuildSettings.asset +++ b/ProjectSettings/EditorBuildSettings.asset @@ -9,6 +9,6 @@ EditorBuildSettings: path: Assets/KSH/ReHousing.unity guid: b748e35b920bde64cbd6ffe5fdb43e23 - enabled: 1 - path: Assets/KSH/DungeonTestScene.unity - guid: 4563b107911b0e54cbdf659694a6f17a + path: Assets/KSH/ReDungeon.unity + guid: b7412a4a2ee433447afcb28700cb50a9 m_configObjects: {}