Add duty free systems and travel stage updates

This commit is contained in:
jongjae0305
2026-07-09 02:50:48 +09:00
parent 445d74d462
commit 750e9ce0a6
340 changed files with 21825 additions and 1197 deletions
+55 -1
View File
@@ -5,6 +5,11 @@ using UnityEngine;
// PlayerController는 플레이어 캐릭터로서 Player 게임 오브젝트를 제어한다.
public class PlayerController : MonoBehaviour {
public AudioClip deathClip; // 사망시 재생할 오디오 클립
public AudioClip jumpClip; // 점프시 재생할 오디오 클립
public AudioClip doubleJumpClip; // 2단 점프시 재생할 오디오 클립
public AudioClip slideClip; // 슬라이딩 시작시 재생할 오디오 클립
[Range(0f, 1f)]
public float movementSfxVolume = 0.72f; // 이동 효과음 볼륨
public float jumpForce = 600f; // 점프 힘
public int maxJumpCount = 2; // 최대 점프 횟수
public float invincibleDuration = 1.5f; // 피해를 입은 뒤 무적 시간
@@ -37,6 +42,8 @@ public class PlayerController : MonoBehaviour {
animator = GetComponent<Animator>();
playerAudio = GetComponent<AudioSource>();
spriteRenderer = GetComponent<SpriteRenderer>();
ConfigureAudioSource();
LoadMovementSfxDefaults();
// 게임 콜라이더를 가져와서 현 상태를 저장
playerCollider = GetComponent<CapsuleCollider2D>();
@@ -64,7 +71,7 @@ public class PlayerController : MonoBehaviour {
// 리지드바디에 위쪽으로 힘을 주기
playerRigidbody.AddForce(new Vector2(0, jumpForce));
playerAudio.Play();
PlayJumpSfx();
}
else if(Input.GetMouseButtonUp(0) && playerRigidbody.linearVelocityY > 0)
{
@@ -174,6 +181,7 @@ public class PlayerController : MonoBehaviour {
private void StartSlide() {
isSliding = true;
animator.SetBool("Sliding", true);
PlayMovementSfx(slideClip, movementSfxVolume * 0.72f);
playerCollider.size = slidingColliderSize;
playerCollider.offset = slidingColliderOffset;
@@ -238,4 +246,50 @@ public class PlayerController : MonoBehaviour {
spriteRenderer.color = Color.white;
isInvincible = false;
}
private void ConfigureAudioSource() {
if(playerAudio == null)
{
playerAudio = gameObject.AddComponent<AudioSource>();
}
playerAudio.playOnAwake = false;
playerAudio.spatialBlend = 0f;
}
private void LoadMovementSfxDefaults() {
if(jumpClip == null)
{
jumpClip = Resources.Load<AudioClip>("SFX/SFX_Player_Jump");
}
if(doubleJumpClip == null)
{
doubleJumpClip = Resources.Load<AudioClip>("SFX/SFX_Player_DoubleJump");
}
if(slideClip == null)
{
slideClip = Resources.Load<AudioClip>("SFX/SFX_Player_Slide");
}
}
private void PlayJumpSfx() {
AudioClip clip = jumpCount > 1 && doubleJumpClip != null
? doubleJumpClip
: jumpClip;
float volume = jumpCount > 1
? movementSfxVolume * 0.9f
: movementSfxVolume;
PlayMovementSfx(clip, volume);
}
private void PlayMovementSfx(AudioClip clip, float volume) {
if(playerAudio == null || clip == null)
{
return;
}
playerAudio.PlayOneShot(clip, Mathf.Clamp01(volume));
}
}