
대망의 내일배움캠프 Unity 3기 과정 시작 🎉
5인 1조로 카드 매칭 게임을 제작하는 미니 프로젝트도 바로 시작되었는데,
여러가지 기능 구현을 각자 파트로 나눠서 구현해보고 있다.
다른 조원분들도 굉장히 잘하시는데 본인은 아직 부족한 부분이 많아 큰일이다.
최대한 구현 할 수 있는 기능을 구현해보며 학습해보고
팀원끼리 만든 코드를 병합하는 과정에서 시행착오도 발생할듯 싶고
기능 구현도 중요하지만 팀원과의 협업과 팀원 소개도 어떻게 게임 안에 기발하게 구현 할 수 있을지 고민 해봐야😃
유니티 Prefabs - card에 audio source 컴포넌트 적용
card.cs 가서
public AudioClip flip;
public AudioSource audioSource;
부여
public void openCard() 함수 안에
audioSource.PlayOneShot(flip);
// flip을 한번만 재생
card,
유니티 assets - prefabs - card - card 스크립트의 Flip에 flip 사운드 삽입
Audio source에 card 프리팹 삽입
유니티 gamaManager에 audio source 컴포넌트 적용
gameManager.cs 가서
public AudioSource audioSource;
public AudioClip success;
부여
public void isMatched() 함수 안
if (firstCardImage == secondCardImage)
audioSource.PlayOneShot(success);
// isMatched() 함수 작동해서 첫카드랑 둘째카드가 같으면 success 한 번만 재생
유니티 gamaManager,
Audio source에 gameManager, success에 success 사운드 부여
gameManager.cs 가서
public AudioClip fail;
부여
public void isMatched() 함수
else안에
audioSource.PlayOneShot(fail)
// isMatched() 함수 작동해서 첫카드랑 둘째카드가 틀리면 fail 한 번만 재생
유니티 gamaManager,
fail에 fail 사운드 부여
StartScene으로 와서 startBtn.cs 안에
public AudioClip start; // 시작 버튼 사운드
public AudioSource audioSource;
부여하고
public void startGame() 함수 안에
audioSource.PlayOneShot(start); // startGame() 함수 작동시 start 한 번만 재생
을 넣었는데..
!! mainScene으로 넘어가면 start 사운드가 중간에 끊기는 문제가 발생 !!
(새로운 신을 로드하면 기존의 오브젝트는 모두 사라지기 때문인듯)
A. 그냥 mainScene이 시작되면, void start() 함수에 start사운드 시작 코드를 넣어서 재생하기?
-> 이러면 BGM과 겹쳐서 BGM 재생을 start 사운드 길이 만큼 미루는 추가 작업이 필요 할 듯
B. DontDestroyOnLoad 사용 ( 씬이 전환되어도 이 녀석을 적용한 오브젝트는 사라지지 않음 )
예시)
void Start()
{
DontDestroyOnLoad(gameObject);
}
C. 오디오 매니저 구현
D. Coroutine 사용 (소리를 재생하고 일정 시간이 지난 후에 Scene을 전환하는 방식)
-> 이게 나을듯
using System.Collections;
using UnityEngine;
using UnityEngine.SceneManagement;
public class startBtn : MonoBehaviour
{
public AudioClip start; // 시작 버튼 사운드
public AudioSource audioSource;
void Start()
{
}
void Update()
{
}
public void startGame()
{
StartCoroutine(PlayStartSoundAndLoadScene());
}
IEnumerator PlayStartSoundAndLoadScene()
{
audioSource.PlayOneShot(start); // 사운드 재생
yield return new WaitForSeconds(1.5f); // 1.5초 대기
SceneManager.LoadScene("MainScene"); // MainScene으로 전환
}
}
Coroutine 기능을 사용하여 해결 했지만, 좀 더 간단하게 하는 방법을 찾아서 보완해야 할 듯하다.
-간단한 기능 복습
public Text timeTxt;
float time = 0.0f;
void Update()
{
time += Time.deltaTime;
timeTxt.text = time.ToString("N2");
}
public static gameManager I;
void Awake()
{
I = this;
}
using UnityEngine.SceneManagement;
public void startGame()
{
SceneManager.LoadScene("MainScene");
}
using UnityEngine.SceneManagement;
public void retryGame()
{
SceneManager.LoadScene("MainScene");
}
본인 같은 경우 정해진 기능 구현 및 구현 방식에 애를 먹었는데 다른 팀원 분들은 담당한 기능 구현 외에도 추가적이고 기발한 방식으로 기능을 구현하는 것이 인상 깊었다.
내일은 나도? 😎
아무튼 쉽지 않았다.