
어제는 시작 버튼 클릭 사운드를 구현 중,
시작 씬에서 메인 씬으로 넘어갈 때
start 사운드가 끊기는 문제가 있었다.
(이로 인해 유니티에서는 씬이 넘어가면 기존 씬의 오브젝트는 모두 '파괴' 되는 것을 알았다..)
그래서 오늘은
startBtn.cs (스타트 버튼 스크립트) 안의
startgame() 함수에 Coroutine을 사용하고
예시. StartCoroutine(PlayStartSoundAndLoadScene());
IEnumerator 함수로 start 사운드를
yield return new WaitForSeconds(1.5f)
1.5초 대기하고 재생 시키도록 하여 다음 씬에서 넘어 갈 때 사운드 끊김 문제를 해결했었다.
그리고 더 나은 방법을 찾기 위해 구글링을 해본 결과
DontDestroyOnLoad(); 라는 함수를 사용 해보았다.
(주의! DonDestroyOnLoad하려는 오브젝트가 자식 오브젝트여서는 안 됨)
https://www.youtube.com/watch?v=5Uq8KAkmoto
(부모, 자식 오브젝트가 뭔데? 링크 참조)

위 사진과 같이
audioManager.cs에서
void Start() 함수에 DontDestroyOnLoad 저 녀석을 넣어서 오브젝트 보존을 하였고
기존 startBtn.cs(시작 버튼 스크립트)에서 Coroutine의 자질구레한 연관 코드는 다 지우고
public void startGame()
{
audioSource.PlayOneShot(start); // start 사운드 1회 재생
SceneManager.LoadScene("MainScene"); // MainScene으로 전환
}
다시 버튼만 누르면 씬이 전환 되면서 사운드가 1회 재생 되도록 롤백.
https://www.youtube.com/watch?v=oGPrjpwKRMg
(유투브에도 DontDestroyOnLoad 함수에 관해 설명하는 링크가 있었다. 구글은 위대하고 구독 좋아요 눌렀다)

다시 유니티로 넘어와서
audioManager의 오디오 소스에 start라는 사운드 파일을 넣어주고
(이미지에는 안 나와있지만 play on Awake는 해제함)

startBtn 버튼 오브젝트의 On Click() 기능에
버튼을 클릭하면 오디오 매니저에 넣어둔 오디오 클립 start 사운드가 플레이 되도록 하였다.
일단은 이 정도로 해보니 이 방법도 뭔가 얼렁뚱땅 실행은 된 느낌이다.
그리고 메인씬으로 넘어가니 hierarchy에 앞서 destroy 되지 않게 한 object가 쌓이는데
이 부분에서 문제를 일으킬 수 있기 때문에 다시 제거 할 방법을 찾아 봐야한다.
1. gameManager 오브젝트에 넣기로 함.
gameManager.cs에서
public AudioClip bgm; // 배경음악 사운드
void Start() 함수
audioSource.clip = bgm;
audioSource.Play(); //bgm 재생
너무 소리가 커서
(오디오3)
gamaManager 오디오 소스의 clip에 bgm을 넣고
Volume을 1 -> 0.2 정도로 줄임.
#결과에 점수 표시 → 남은 시간, 매칭 시도한 횟수 등을 점수로 환산 → 나
를 해보기로 했는데 이건 일단 넘기고
게임 플레이시 BGM on/off 버튼을 우측 하단에 만들면 좋겠다는 생각이 들어서 이쪽으로 선회했다.
(시끄러워서 다른 사운드가 상대적으로 묻히는듯 하여)
2. 배경음악 on/off 버튼 제작 시행착오
처음에는 유니티 내 Canvas에 UI-Button을 만들어서 한 번 클릭시 Bgm off / Bgm On 기능을 넣어보려고 했는데
Toogle 기능이 따로 있다는 것을 발견하고 이쪽으로 선회
(Toggle은 클릭했을때 온오프 상태를 표시하고
Toggle에 상태가 변할때 메소드를 출력할 수 있는 상호작용이 가능한 UI)
일단 UI Toggle 을 만들어서 On, Off 이미지를 각각 할당
OnoffBtn.cs 실행
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.UI; // Toggle 기능 때문에 불러옴
public class onoffBtn : MonoBehaviour
{
public AudioSource audioSource;
public Toggle OnoffBtn; // toggle 기능
// Start is called before the first frame update
void Start()
{
audioSource = GetComponent<AudioSource>(); // 오디오소스 컴포넌트
OnoffBtn = GetComponent<Toggle>(); // 온오프버튼 컴포넌트
OnoffBtn.onValueChanged.AddListener(OnoffToggle); // OnValueChanged 이벤트에 함수 등록
}
// Update is called once per frame
void Update()
{
}
void OnoffToggle(bool isOn)
{
// 음악 켜기 또는 끄기
if (isOn)
{
// On일 때 재생
audioSource.Play();
}
else
{
// Off일 때 정지
audioSource.Stop();
}
}
}
(AddListener 함수는 함수를 다중으로 더함)
위와 같은 방식으로 해보려고 했는데 Toggle 인스펙터의 On click boolean? 기능에 대한 이해도가 부족하여
당초 원했던 on/off 기능이 제대로 되지 않았다.
그래서 다시 ui 버튼으로 돌아와, 아예 이미지를 2개 만들고(On과 Off 이미지) 다시 스크립트를 짜서
계속 시행착오를 겪으며 시도 해보고는 있는데 벌써 저녁8시 37분이다.
팀원분이 boolean istrue, false 하는 방식으로 해보면 좋을 것 같다고 하셔서 내일 주말이니 시간도 많겠다
일단 제대로 해결해보려고 한다.
버전 관리 -> 작업물을 작업 단위별로 관리?
어떤 파일이 추가 삭제 수정 로그 확인
파일의 어디가 수정되었는지 확인
깃헙 데스크의 가운데 브런치가 있는데 New branch 로
메인부터 시작되는 분기를 여러 개 만들 수 있음.
협업
ui 쉽게
소스트리
TortosieGit
Githup 데스크탑 << 우린 이거 사용
비주얼 스튜디오
-> Init을 해야함 (저장소를 만든다)
create를 통해서 작업 파일을 선택
원격 저장소를 만들어야함 publish
clone
원격 저장소에서 로컬 저장소도 다운 하는것
pull
이미 만들어진 저장소끼리 작업내용만 다운로드
push
로컬 저장소에 작업한 내용을 원격 저장소에 업로드
cube (main이 아닌 cube 파일에서 작업)
Merge (cube와 main을 합치기) 브런치간 데이터를 합치기
깃헙 - 프라이빗 or 퍼블릭으로 선택
깃헙 -> setting -> collaborators (팀원 추가시 수정할 권리 생김)
이야기만 들으면 이게 무슨 소리인가 싶었는데
팀원들의 설명과 도움으로 github에 유니티, cs등을 연동하고 나니까
신기하게 모든 팀원들의 수정 사항과 추가한 내용이 기록되며
이 내용을 pull , push 하며 공통된 작업물을 완성 시켜 나가는게 정말 재미있었다.
별로 한건 없지만..
다만 다른 분들은 이미 착실하게 만든 내용을
나는 아직 계속 저 부분에서 헤매고 있다는게 문제. 😢
게다가 commit을 하다가 코드 병합 과정에서 충돌이 발생하였는데 이 부분에서도 시행착오가 많았다.
(타이밍이 안 맞으면 이런 경우가 많은듯 하다.)
주말에 시간이 많으니 gitHub에 대해 다시 공부하고 여러가지 기능을 다시 넣어봐야겠다.
끝