오늘은 일단 노트 속도 설정하는 부분만 작업했습니다
본가에서 학교쪽으로 다시 올라오느라 거의 하루 전체를 그냥 보내버렸다시피 했네요
그냥 속도 조절하는 UI 관련 기능들은 스크립트 하나에 다 몰아서 넣었습니다
노트 계속 생성하는거랑 속도조절, OK 눌러서 다음으로 넘어가는거 이렇게 3개 있었죠
다음으로 넘어가는건 만들어는 뒀는데 영상에선 안들어갔네요
private void FixedUpdate()
{
time++;
if (time >= 375)
{
time -= 375;
GameObject n = Instantiate(note);
n.transform.position = new Vector3(-2.5f, 0.05f, 64.6f);
n.GetComponent<TestNote>().speed = 2500 / noteSpeed;
}
}
노트 생성은 정확도를 위해서 FixedUpdate 에서 돌렸습니다
아무래도 그냥 Update에서 돌리면 프레임 딱 시작할때 실행되니까 미세한 시간차가 생길 수 있다보니 이부분을 고려해서 추가로 계산을 해줘야 하는 것에 비해 fixedUpdate는 지정한 횟수만큼 거의 무조건 반복하니까요
void Update()
{
Vector3 pos = transform.position;
transform.position = new Vector3(pos.x, pos.y, 64.6f - (time / (float)speed) * 68.1f);
}
private void FixedUpdate()
{
time++;
if (time >= speed)
Death();
}
노트 이동하는 부분에서도 FixedUpdate를 사용하긴 하는데, 여기선 Update를 같이 사용했습니다
fixedupdate는 프레임과 관계없이 실행되기 때문에 다음 프레임으로 넘어가기까지 여러번이 실행될 수도 있습니다
출력되는 화면은 가만히 있는 채로 연산만 실행하는것이죠
그렇기 때문에 4번째 줄의 노트 위치를 갱신하는 코드를 굳이 화면이 바뀌지 않는 fixedUpdate에 적을 필요가 없다고 생각했습니다.
어차피 화면은 프레임이 넘어가야 바뀌는 거고, 위치 계산은 노트에 할당된 생명 주기(time 변수) 값에 따라 위치를 아예 새로 잡아주는 방식이다보니 FixedUpdate에 넣으면 연산량만 늘어나는거 아닌가 하고 생각한 것이죠
그래서 저 시간과 관련된 time 변수는 FixedUpdate에서 처리하고, 화면 출력과 관련된 저 포지션 변경에 대한 코드는 update에서 처리하도록 구성을 했습니다
근데 영상에서 보면 속도를 변경할 때 새로 생성되는 노트부터 바뀐 속도가 반영되는 걸 볼 수 있습니다(속도 1로 맞춰놓고 갑자기 확 올리면 나중에 생성되는 노트속도만 빠르게 설정되서 앞에 있는 노트들을 앞지른다거나)
뇌 좀 굴려서 깔끔하게 만들 수도 있었겠지마는 지금 저는 프로토타입을 만드는 것이고 빨리 플레이할 수 있는 결과물을 만들어내는 것이 목적입니다
그런 목표를 정확히 짚고, 그 목표를 달성하기 위한 것만 빨리 다 만들어내기에도 바쁜 시점에서 굳이 그런 디테일까지 신경쓰는 건 과한 투자라고 생각했습니다
굳이 깔끔하게 안만들어도 속도 변경할 수 있고, 지금 내가 설정한 속도가 어느정도인지 보이면 그걸로 이 기능을 만드는 목표는 다 이룬 거니까요
와 근데 확실히 플로우 짜놓으니까 구현속도 빨라지는게 체감이 확 들긴 하네요
일단 멍때리는 시간 자체가 줄어드니까 그만큼 효율이 나는듯 합니다
오늘 포스팅 끝
'플밍' 카테고리의 다른 글
리듬겜 프로토 제작일기 - 5 (0) | 2020.08.21 |
---|---|
리듬겜 프로토 제작일기 - 4 (0) | 2020.08.19 |
리듬겜 프로토 제작일기 - 3 (0) | 2020.08.18 |
리듬겜 프로토 제작일기 - 1 (0) | 2020.08.16 |
언리얼 책 떼기 - AI컨트롤러, 네비게이션 맛보기 (0) | 2019.12.23 |