본문 바로가기
유니티5 독학 & 게임 제작

유니티5 독학하기 그 72번째 걸음-점프와 버튼효과음의 적용

by 인터넷떠돌이 2018. 8. 21.
반응형

안녕하세요?


이번 포스팅에서는 연습으로 만들고 있는 게임에서 메뉴에서 버튼을 누를때 나오는 사운드와 점프시에 따로 사운드를 지정해서 재생시키는 것에 성공했고, 이 내용으로 포스팅을 하고자 합니다.



먼저 점프를 할 경우에 나오는 사운드에 대해서 한번 SoundBible에서 다운로드 받아 오도록 합니다.



그리고 적용할 대상이 되는 Player게임 오브젝트를 유니티5 상에 있는 계층뷰에서 선택하도록 합니다.



인스펙트 뷰에서 Audio Source 컴포넌트를 추가해 놓도록 하고, 다음으로는 Play On Awake를 해제하도록 합니다.



그리고 오디오 소스를 추가한 것만으로는 아무런 작동을 하지 않기 때문에, 하는 수 없이 PlayerController.cs 스크립트에 코드를 넣으러 가 보도록 합니다.




그리고 사운드가 점프할 때 나와야 하기에, 여기서는 위 스크린샷의 붉은색 박스안의 내용과 같이 코딩을 해서Audio Source에 들어가 있는 효과음이 재생이 되도록 합니다. 형식은 다음과 같습니다.


AudioSource 변수 = GetComponent<AudioSource>();

변수.Play();


이런식으로 코딩을 해서, 이 스크립트가 컴포넌트로서 들어가 있는 게임 오브젝트에 AudioSource가 있으면, 이 오디오 소스를 변수에 대입하고, Play()라는 명령어로 실행을 시킨다는 것 입니다.



이제 이번에는 버튼을 누를 때 효과음이 나올 수 있도록 하는 작업에 들어가야 합니다. 이번에는 메뉴에서 Play버튼을 눌렀을 때 소리가 나오도록 PlayButton을 선택하도록 합니다.



여기서 AudioSource컴포넌트를 추가한 다음에, Play On Awake를 해제하고 오디오 파일을 정해 놓도록 합니다.



그리고 이번에는 해당 버튼의 메소드가 있는 GameManager.cs 스크립트를 코딩하러 갑니다.




그리고 먼저 public GameObject 변수명; 이라는 게임 오브젝트를 변수명으로 선언하는 광역변수를 선언하도록 합니다.



그리고 StartGame()메소드에서 Play버튼에 있는 사운드 소스를 가져와서 재생하라는 코드를 입력 하도록 합니다.



코드를 저장하고 나서, 유니티5로 돌아와서 이번에는 계층뷰에서 GameManager를 선택하도록 합니다.



앞서서 정확히 어떤 게임 오브젝트라는 것을 지정하지 않았기 때문에, 스크립트의 란에 위와 같이 처음에는 비어 있는데, 각각에 해당하는 버튼의 게임 오브젝트를 드레그 앤 드롭으로 끌어 오도록 합니다.




그리고 PlayAgain을 눌렀을 때 버튼에도 똑같이 위와 같은 식으로 오디오 소스를 재생 시키라고 코드를 지정해 줍니다.



그리고 게임오버 뷰에 있는 MainMenu버튼에서도 위와 같은 코드를 추가해서 이번에도 버튼을 눌렀을 때 효과음이 나올 수 있도록 합니다.



그런데 유니티5의 콘솔에서 난데없이 에러가 뜨는데, 이 에러의 내용은 이미 Destroy되어 없는 게임 오브젝트에 계속 파괴하라는 명령을 내려서 발생하는 것이기 때문에, 하는 수 없이 이 에러를 해결해야 합니다.



위 스크린샷처럼, LevelPiece에 계속 명령이 내려져서 생기는 오류이기 때문에, if문으로 오직 해당하는 게임 오브젝트가 있을 때만 Destroy명령이 실행 되도록 하는 것 입니다. 여기서 왜 변수 선언을 했냐 하면, if문에 게임 오브젝트를 직접 입력하고 싶어도, LevelPiece를 그대로 입력하면 에러가 뜨기 때문에 하는 수 없이 이렇게 해야만 했습니다.



이것으로 한 걸음 더 완성되는 게임에 가까워 진 것 같기는 하지만, 아직은 레벨이 생성되는 모습이 매끄럽지가 않습니다. 자꾸 오른쪽 끝에서 끊어지는 느낌이 드는데, 이를 보완하기 위한 방법이 필요하지만, 이것도 얼마나 시간이 걸릴지 모르겠다는 생각이 듭니다.

반응형