Add duty free systems and travel stage updates
This commit is contained in:
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user