21.12.21 TIL - Unity 미니 프로젝트 시작

JJwoo·2023년 12월 21일

대망의 내일배움캠프 Unity 3기 과정 시작 🎉

5인 1조로 카드 매칭 게임을 제작하는 미니 프로젝트도 바로 시작되었는데,

여러가지 기능 구현을 각자 파트로 나눠서 구현해보고 있다.

다른 조원분들도 굉장히 잘하시는데 본인은 아직 부족한 부분이 많아 큰일이다.

최대한 구현 할 수 있는 기능을 구현해보며 학습해보고

팀원끼리 만든 코드를 병합하는 과정에서 시행착오도 발생할듯 싶고

기능 구현도 중요하지만 팀원과의 협업과 팀원 소개도 어떻게 게임 안에 기발하게 구현 할 수 있을지 고민 해봐야😃


@내 역할 -> 뒤집기 / 시작 /성공 / 실패시 작동 사운드 구현

  1. 카드 뒤집기 flip 사운드 : 강의 참조함
유니티 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 프리팹 삽입

  1. 카드 매칭 사운드 (성공) : 강의 참조함
유니티 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 사운드 부여

  1. 카드 매칭 사운드 (실패) : 2번 과정의 else에 넣어버림.
gameManager.cs 가서
public AudioClip fail; 
부여

public void isMatched() 함수
else안에

audioSource.PlayOneShot(fail) 
// isMatched() 함수 작동해서 첫카드랑 둘째카드가 틀리면 fail 한 번만 재생

유니티 gamaManager,
fail에 fail 사운드 부여

  1. 시작 사운드 : startScene의 게임 시작 버튼 누르면 start 사운드가 실행되는 방식으로 설계
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");
}

본인 같은 경우 정해진 기능 구현 및 구현 방식에 애를 먹었는데 다른 팀원 분들은 담당한 기능 구현 외에도 추가적이고 기발한 방식으로 기능을 구현하는 것이 인상 깊었다.

내일은 나도? 😎
아무튼 쉽지 않았다.

profile
개발 모코코

0개의 댓글