Ch 8. 골인 지점
카테고리: Unity Lesson 4
태그: Unity Game Engine
케이디님의 [유니티 강좌] 리듬 게임 유튜브 강의를 듣고 정리한 필기입니다. 😀
🌜 강의 들으러 가기 Click
🚀 골인 지점
큐브가 골인 지점에 도달하면 게임이 종료되도록 한다.
플레이어 큐브가 이 골드 플레이트에 닿으면 게임이 끝난 것으로 간주할 것이기 떄문에 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 호출하여 노트 생성 막기.
OnTriggerEnter 이벤트가 발생할 수 있도록 플레이어 오브젝트에게 Rigidbody 를 붙여주고 Collider 의 IsTrigger를 체크해준다. 그리고 태그도 “Player”로 설정.
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기