
●기본 씬 구성하기


-시작화면에서 이미지들이 계속 바뀌게하는 애니메이션
●스플래시 이미지 만들기

스프라이트는 메쉬(Mesh)를 기반으로 이미지를 보여준다.
메쉬는 컴퓨터 그래픽스에서 물체의 형태를 구성하는 Vertex, Edge, Face 등을 가지는 데이터이다.
Mesh Type은 Full Rect와 Tight 두 가지 타입이 있다.
Full Rect는 이미지의 크기와 동일한 형태로 스프라이트를 렌더링한다.
Full Rect는 스프라이트를 만드는 전통적인 방식으로, RGBA를 기반으로 투명 영역을 포함하는 사각 영역 전체를 렌더링 한다.
Tight는 스프라이트의 투명 영역을 제외하고, RGBA를 기반으로 일정 영역을 렌더링한다.
아래 두 개의 사진은 Shaded Wire Frame Scene 모드에서 동일한 스프라이트를 렌더링 한 이미지이다.
Full Rect로 그린 영역은 대각선의 큰 선( Edge )을 포함하는 영역 전체를 표시하고 있다.
Tight는 RGB로 표시된 흰색 영역에 선들로 연결되어 있는 모습으로, 투명한 부분을 거의 제외한 모습이다. 
@Splash Style
Preview밑에 있는 Splash Style은 배경과 로고 색상을 바꾸는 옵션
@Animation (1번)
Dolly는 이미지가 점점 커지는 형식 / Static은 이미지가 일정 크기를 유지
@Draw Mode (2번)
Unity Logo Below는 내가 삽입한 이미지 아래에 유니티 로고가 나오는 형식 / All Sequential은 유니티 로고가 먼저 나오고 그 다음에 내가 삽입한 로고가 등장
●소리 & 배경음악 넣기
<Card.cs>
public AudioClip clip; // audioSource 컴포넌트를 변수로 담아놓음
public AudioSource audioSource; // clip 변수 생성
void Start()
{
audioSource = GetComponent<AudioSource>(); // AudioSource 컴포넌트를 가져와 audioSource에 음악파일을 넣어야 함
}
public void OpenCard()
{
audioSource.PlayOneShot(clip); // PlayOneShot 메소드 호출 / PlayOneShot: AudioClip끼리, 다른 효과음들끼리 겹치지 않음
// Audio Source를 재생시켜도 겹치지 않고 딱 한 번만 실행이 됨
anim.SetBool("isOpen", true);
front.SetActive(true); // Animations 폴더의 Card Animator의 Parmeters에서 설정했던 카드를 맞췄을 때 뒤집는다는 설정
back.SetActive(false); // 틀리면 카드를 뒤집지 않는다.
// 중간 생략
}

<GameManager.cs>
AudioSource audioSource; // 변수 생성
public AudioClip clip; // 변수 생성
void Start()
{
Time.timeScale = 1.0f; // 재시작 했을 때 다시 게임이 돌아가게 하기 위함
audioSource = GetComponent<AudioSource>(); // AudioSource 컴포넌트를 가져와 audioSource에 음악파일을 넣어야 함
}
public void Matched() // 카드가 똑같은지
{
if(firstCard.idx == secondCard.idx) // 첫번째와 두번째 카드의 그림이 같을 때
{
audioSource.PlayOneShot(clip);// PlayOneShot 메소드 호출 / PlayOneShot: AudioClip끼리, 다른 효과음들끼리 겹치지 않음
// Audio Source를 재생시켜도 겹치지 않고 딱 한 번만 실행이 됨 / clip에 원하는 오디오파일 삽입
firstCard.DestroyCard(); // 파괴
secondCard.DestroyCard(); // 파괴
cardCount -= 2; // 전체 카드 개수 2개씩 감소 (맞춘거 만큼 제거)
//중간 생략
}


<AudioManager.cs>
public AudioSource audioSource;
public AudioClip clip;
public static AudioManager Instance;
AudioSource audioSource; // 변수 생성
public AudioClip clip; // 변수 생성
private void Awake()
{
if (Instance == null) // Instance가 null이라는 것은 모두가 접근할 수 있는 Instance 변수에 아직 아무것도 담겨 있지 않다는 뜻
{
Instance = this; // 내 자신이 담겨있다. -> null 아님
DontDestroyOnLoad(gameObject); // scene을 이동해도 AudioManager 게임 오브젝트가 파괴되지 않는다.
// AudioManager 게임 오브젝트가 파괴 되지 않으면 거기에 붙어 있는 AudioSource, AudioManager 스크립트도 파괴되지 않는다.
// 그러면 음악도 컴포넌트가 파괴되지 않으면서 그대로 유지되면서 넘어간다.
}
else
{
Destroy(gameObject); // 이미 나 하나가 존재할 때 새로운 것이 생성되려하면 그것을 파괴한다.
// 이미 StartScene에서 만들어 놓은 Instance가 있기 때문에 else문을 타서 파괴 됨 -> 결과적으로 BGM 하나만 재생 됨
}
}
// Start is called before the first frame update
void Start()
{
audioSource = GetComponent<AudioSource>(); // AudioSource 컴포넌트를 가져와 audioSource에 음악파일을 넣어야 함
audioSource.clip = this.clip; // audioSource.clip에 AudioManager 스크립트에 있는 clip을 넣어줌 / this 생략가능
audioSource.Play(); // audioSource 재생 (bgm 재생)
}