Ch 8. 골인 지점

Date:     Updated:

카테고리:

태그:

케이디님의 [유니티 강좌] 리듬 게임 유튜브 강의를 듣고 정리한 필기입니다. 😀
🌜 강의 들으러 가기 Click

🚀 골인 지점

큐브가 골인 지점에 도달하면 게임이 종료되도록 한다.

image

플레이어 큐브가 이 골드 플레이트에 닿으면 게임이 끝난 것으로 간주할 것이기 떄문에 1️⃣빵빠레 효과음이 울리고 2️⃣더 이상 플레이어를 움직일 수 없게 하며 3️⃣노트도 더 이상 생성되면 안된다.

골드 플레이트에 박스 콜라이더를 붙이는데 그 바운드 크기를 좀 작게 한다. 딱 맞는 크기로 해버리면 플레이어 큐브가 닿자마자 게임이 종료되니까 좀 작게.. 그리고 AudioSource도 붙여준다. 마찬가지로 비활하고 plated 배열의 원소로 넣어줌.


📜 PlayerControllsd

public static bool s_canPressKey = true;  // 이 값이 false면 큐브를 움직일 수 없도록(이동 회전 반동 시키는 StartAction 호출 불가)

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.A) || Input.GetKeyDown(KeyCode.D) ||
            Input.GetKeyDown(KeyCode.W) || Input.GetKeyDown(KeyCode.S))
        {
            if (canMove && s_canPressKey)
            {
                Calc();

                // 판정 체크 : Perfect, Cool, Good, Bad 일 때만 True
                if (theTimingManager.CheckTiming())
                {
                    StartAction();
                }
            }
        }
    }


📜 NoteManager

bool noteActive = true;

    public void RemoveNote()
    {
        noteActive = false;
        for (int i = 0; i < theTimingManager.boxNoteList.Count; i++)
        {
            theTimingManager.boxNoteList[i].SetActive(false);
            ObjectPool.instance.noteQueue.Enqueue(theTimingManager.boxNoteList[i]);
        }
    }

    void Update()
    {
        if (noteActive)
        {
            currentTime += Time.deltaTime;

            if (currentTime >= 60d / bpm) // 60/bpm = 한 비트당 시간 (120bpm이라면 한 비트당 소요 시간은 0.5초)
            {
                GameObject t_note = ObjectPool.instance.noteQueue.Dequeue();
                t_note.transform.position = tfNoteAppear.position;
                t_note.transform.localScale = new Vector3(1f, 1f, 0f);
                t_note.SetActive(true);

                theTimingManager.boxNoteList.Add(t_note);
                currentTime -= 60d / bpm;
            }
        }     
    }
  • 노트 생성은 noteActive 이 true 일 때만 이루어지도록.
  • noteActive을 false로 만들고 RemoveNote 모든 노트들을 비활 하고 오브젝트 풀에 도로 넣기


📜GoalPlate

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GoalPlate : MonoBehaviour
{
    AudioSource theAudio;
    NoteManager theNote;

    void Start()
    {
        theAudio = GetComponent<AudioSource>();
        theNote = FindObjectOfType<NoteManager>();
    }

    private void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            theAudio.Play(); // 효과음 재생
            PlayerController.s_canPressKey = false; // 이동 막기
            theNote.RemoveNote(); // 노트 생성 중지
        }
    }
}

골드플레이트가 플레이어와 충돌하면 게임이 종료되도록 처리. 📜NoteManager의 RemoveNote 호출하여 노트 생성 막기.

image

OnTriggerEnter 이벤트가 발생할 수 있도록 플레이어 오브젝트에게 Rigidbody 를 붙여주고 Collider 의 IsTrigger를 체크해준다. 그리고 태그도 “Player”로 설정.



🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

Unity Lesson 4 카테고리 내 다른 글 보러가기

댓글 남기기