본 리듬게임 코드는 이 강좌 코드를 참고하여 작성했습니다
이 코드로 작성 된 게임을 봐 주세요 🥰
◾ 노트 ◾
노트 스크립트
Note 스크립트 생성.
노트 이미지를 만들어준뒤 Note에다가 넣어줍니다.
( Hierarchy에 노트 오브젝트들을 모아놓은 Note 입니다. )
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Note : MonoBehaviour
{
public float NoteSpeed;
//NoteSpeed = Tempo
public bool hasStarted;
void Start()
{
NoteSpeed = NoteSpeed / 60f;
}
void Update()
{
if(!hasStarted)
{/*
if(Input.anyKeyDown)
{
hasStarted = true;
}*/
}
else
{
transform.position -= new Vector3(0f,NoteSpeed*Time.deltaTime,0f);
}
}
}
Public으로 NoteSpeed = Tempo를 지정해주고
bool값을 이용해 노래가 시작했는지 안했는지를 사용하고
키입력시 시작이 되게 하려 했으나
스테이지 시작후 바로 노래가 켜지기 때문에 사용하지 않고 주석처리 했습니다.
else문은 노트가 NoteSpeed만큼 아래로 떨어질수 있게 합니다.
노트 오브젝트 스크립트
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NoteObject : MonoBehaviour
{
public bool canBePressed;
public KeyCode KeyToPress;
public GameObject PerEffect,MissEffect;
void Update()
{
if(Input.GetKeyDown(KeyToPress))
{
if(canBePressed)
{
gameObject.SetActive(false);
//GameManager.instance.NoteHit();
//GameManager.instance.nomalHit();
if(Mathf.Abs(transform.position.y) > -3)
{
Debug.Log("Perfect");
GameManager.instance.perfectHit();
Instantiate(PerEffect,transform.position,PerEffect.transform.rotation);
}
}
}
}
private void OnTriggerEnter2D(Collider2D other)
{
if(other.tag=="Activator")
{
canBePressed = true;
}
}
private void OnTriggerExit2D(Collider2D other)
{
if(other.tag=="Activator")
{
if(gameObject.activeSelf == true)
{
GameManager.instance.NoteMiss();
canBePressed=false;
Instantiate(MissEffect,transform.position,MissEffect.transform.rotation);
}
}
}
노트를 눌렀는지 확인해주는 bool CanBePressed
그리고 이 노트가 무슨 키를 입력해야하는지 설정해주는 변수 KeyToPress
이펙트 설정 변수.
void Update
만약에 canBePressed한다면,
gameObject(노트오브젝트)는 Active
(체크 표시) 해제됩니다.
판정 부분을 넣으려다가 PerFect or Miss로만 남겨 놓아서 이 조건문은 필요 없을 것 같지만
Mathf.Abs 를 이용해 절대값을 주어 만약에 Y 포지션이 -3 보다 크다면
PerFect로 판정 해주는 조건문입니다.
GameManager에 있는 PerfectHit 함수를 instance로 불러오기.
그리고 Instantiate로 paticle(clone)을 만들어줘서
이펙트도 넣어줍니다.
OnTiggerEnter2D부분에서
other.tag가 Activator라면
만약에 트리거가 되면 canBePressed를 할수 있게 만들어주고
Exit 하는데도
노트 오브젝트가 true.. 활성화 되어있으면, NoteMiss를 불러와주고
canBepreesed를 못하게,
public으로 선언된 Key To Press에는 원하는 키 넣어주기.
◾ 버튼 컨트롤러 ◾
네개의 라인의 판정 기준이 될 Object를 만들어줍니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ButtonController : MonoBehaviour
{
public SpriteRenderer theSR;
public Sprite defaultImage;
public Sprite pressdInmage;
public KeyCode keyToPress;
void Start()
{
theSR = GetComponent<SpriteRenderer>();
}
void Update()
{
if(Input.GetKeyDown(keyToPress))
{
theSR.sprite = pressdInmage;
}
if(Input.GetKeyUp(keyToPress))
{
theSR.sprite = defaultImage;
}
}
}
현제 제가 삽입한 이미지는 버튼이미지인데
위 코드는 SpriteRenderer 변수를 만들어주고
GetComponent로 불러와준뒤
키 입력이 가능 할때
변수로 지정된 키를 눌러주면 버튼 이미지가 바뀌도록 하였습니다.
Default이미지와
Pressed이미지
그리고
각각의 버튼들마다 입력을 받을 키를 Inspector에서 지정해줍니다.
코드를 작성하다가 모르는 점이나 오류가 뜬다면 편하게 댓글 달아주세요.
도와드릴수 있는 부분은 최대한 도와드리겠습니다 으쌰으쌰
'🧩 코딩 > 사용한 코드' 카테고리의 다른 글
UnknownHero 코드 공유 / 오브젝트 360도 회전,아이템 떨어지기 (0) | 2023.05.15 |
---|---|
UNITY MBTI 테스트 앱 코드 / List 사용법 (0) | 2023.04.04 |
Unity2D 모바일 조이스틱을 이용한 움직임 코드 🏃♀️ Transform.localScale을 이용한 이미지 회전 (0) | 2022.10.20 |
우당탕탕 [ 피하기 게임 ] 코드 공유 / Random Range를 이용한 랜덤 오브젝트 생성 / 2D Player 움직임 코드 (2) | 2022.10.13 |
리듬 게임 2강 - 게임 매니저,플레이어 / Trigger 이벤트로 텍스트 띄우기 / enabled를 이용한 애니메이션 / 움직이는 맵 (1) | 2022.10.07 |