음악 & 사운드는 게임에서 빼먹을 수 없는 중요한 요소 중 하나이다. 사운드를 적절하게 사용하기 위해서 최소한 AudioSource와 AudioClip 정도만 알아도 사용할 수 있다.
AudioSource는 AudioClip을 재생시키기 위한 컴포넌트며, 라디오로 따지면 라디오의 본체라고 할 수 있고, AudioClip은 라디오에 넣는 CD, 즉 음원 파일이다.
따라서 방법을 먼저 짧게 설명하자면, 오브젝트에 AudioSource를 붙이고, 이 AudioSource에 AudioClip을 넣어서 원하는 타이밍에 재생시키면 된다. 아래의 과정을 따라해보자.
1. 원하는 오브젝트에 AudioSource를 부착해준다. (하단의 Add Component -> Audio Source를 검색해서 찾아준다.)
2. Audio Source에 있는 Audio Clip이 음악을 넣는 곳이다. 쉽게 생각한다면 Audio Source라는 라디오에 Audio Clip이라는 CD를 넣는 것이라 볼 수 있겠다. 본인이 넣고 싶은 음악을 넣자.
3. Audio Source의 속성으로 음악을 원하는 타이밍에 원하는 소리로 나오게 할 수 있다. 가령 Play On Awake는 시작할 때 무조건 한 번 음악이 발생하고, Loop는 음악이 무한 반복 될 것이다. 다른 속성들도 직접 사용해보면서 어떤 기능을 하는지 확인해보자. (사실 필자도 다 사용해보지 않아서 무슨 기능인지 다 모른다.)
Play On Awake를 체크하면 게임이 시작할 때나, 해당 오브젝트가 생성될 때 음악이 한번 실행되는데, 효과음 등은 원하는 타이밍만 나오게 하고 싶을 것이다. 따라서 특정 행동을 하게 될 때 코드로 사운드를 실행할 수 있게 만들어보자.
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class StepCollision : MonoBehaviour { private Stage s; private Sprite StepOff, StepOn;
// AudioSource audioSource;
public AudioClip StepOnSound;
private void Awake() { StepOff = gameObject.GetComponent<SpriteRenderer>().sprite; StepOn = Resources.Load<Sprite>(gameObject.tag); audioSource = this.gameObject.GetComponent<AudioSource>(); } private void OnTriggerEnter2D(Collider2D collision) { if (this.gameObject.tag.Contains(collision.gameObject.tag)) { s = GameObject.FindWithTag("accepted").GetComponent<Stage>(); collision.GetComponent<CollisionManager>().isStepOn = true; this.audioSource.Play(); this.gameObject.GetComponent<SpriteRenderer>().sprite = StepOn; s.currStepCnt++; } else if(gameObject.tag.Contains("left") && collision.gameObject.tag.Contains("left")) { this.audioSource.Play(); this.gameObject.GetComponent<SpriteRenderer>().sprite = StepOn; } else if (gameObject.tag.Contains("right") && collision.gameObject.tag.Contains("right")) { this.audioSource.Play(); this.gameObject.GetComponent<SpriteRenderer>().sprite = StepOn; } else if (gameObject.tag.Contains("up") && collision.gameObject.tag.Contains("up")) { this.audioSource.Play(); this.gameObject.GetComponent<SpriteRenderer>().sprite = StepOn; } else if (gameObject.tag.Contains("down") && collision.gameObject.tag.Contains("down")) { this.audioSource.Play(); this.gameObject.GetComponent<SpriteRenderer>().sprite = StepOn; } } private void OnTriggerExit2D(Collider2D collision) { if (this.gameObject.tag.Contains(collision.gameObject.tag)) { this.gameObject.GetComponent<SpriteRenderer>().sprite = StepOff; s = GameObject.FindWithTag("accepted").GetComponent<Stage>(); collision.GetComponent<CollisionManager>().isStepOn = false; s.currStepCnt--; } else if ((gameObject.tag.Contains("down") && collision.gameObject.tag.Contains("down")) || (gameObject.tag.Contains("up") && collision.gameObject.tag.Contains("up")) || (gameObject.tag.Contains("left") && collision.gameObject.tag.Contains("left")) || (gameObject.tag.Contains("right") && collision.gameObject.tag.Contains("right"))) { this.gameObject.GetComponent<SpriteRenderer>().sprite = StepOff; } } }
AudioSource audioSource를 선언해주자. public으로 선언해서 Inspector창에 직접 끌어다놔도 되고, Start() 함수나 Awake() 함수에서 현재 부착된 AudioSource로 선언해줘도 된다. 편한대로 하자.
이 오디오를 실행시킬 수 있는 코드는 AudioSource.Play() 다. 이 때 Play on Awake에 체크를 해놨다면 이미 실행 된 것이니 소리가 원하는 타이밍에 나오는 것이 아니게 되므로 Play On Awake 체크를 해제해주자. 또한 Loop를 사용하게 될 경우 효과음처럼 한번 발생하는 것이 아니라 계속 소리가 나게 될 것이다. 계속 반복해야 하는 배경 음악 같은 경우 체크를 해줘야 겠지만 효과음엔 적절치 않다. 역시 체크 해제 해주자.
이제 원하는 액션을 취하면 소리가 잘 나오는 것을 확인할 수 있을 것이다.
링크해갑니다~
답글삭제