유니티 제작 1. 비 모으기
- 100 powerun
- 4월 8일
- 2분 분량
위의 게임은 간단히 캐릭터가 좌우로 움직이며 비를 모으고 붉은색 비는 피하는 게임 입니다. 좌우 움직임과, 랜덤 위치 생성, 랜덤한 값 생성으로 이루어져 있습니다.
위 게임을 제작하며 새로 알게된 것들
InvokeRepeating
InvokeRepeating("MakeRain", 0f, 1f);
인보크 리피팅은 특정 함수를 일정 딜레이, 일정 간격으로 계속해서 실행해주는 함수입니다.
InvokeRepeating("함수 이름", 코드가 시작된 이후 몇 초 뒤에 실행할 것인가?, 몇 초 간격으로 실행할 것인가?);
즉 Start로 넣을 경우 Update에서 지연을 시켜가며 실행하는 것 보다는 Start에 넣음으로 한번만 실행 후 계속 반복하게 만들어 최적화에 큰 도움이 되기도 합니다.
만약 InvokeRepeating을 멈추고 싶다면 CancelInvoke를 사용하면 됩니다.
CancelInvoke("함수명") // 특정 함수를 멈춤
CancelInvoke(); // 모든 반복을 멈춤
Invoke와의 차이점
Invoke는 특정 함수를 몇 초 뒤에 실행하는 딜레이를 이용할 때에 사용되고,
InvokeRepeating은 특정 함수를 몇초뒤 딜레이를 이용하는 동시에 몇 초 간격으로 반복하는지도 설정합니다.
주의사항
인보크를 사용할 때에는 함수 명을 반드시 string, 문자열로 입력해야 합니다.
Time.timeScale
timeScale은 게임의 시간을 조정하는 변수로 0~1 사이의 값을 입력하여 게임의 시간을 조정할 수 있습니다.
1 - 정상속도
0.5 - 절반 속도
0 - 아이에 멈춤
이를 이용하여 게임 일시정지나 게임 멈춤, 종료 후 게임 정지 등 여러 기능을 수행할 수 있게 만들 수 있습니다.
deltatime과의 연관성
deltatime은 timeScale의 영향을 받는 변수 입니다. 즉, timeScale이 줄어들면 deltatime또한 느려지게 됩니다.
unscaledDeltatime
unscaledDeltatime은 timeScale의 영향을 받지 않는 시간으로, 아주 간단히 말해 현실 시간과 동일한 시간이라 생각하면 됩니다. 이 값은 주로 시간이나, 버프시간 등등, timeScale의 영향을 받아서는 안되는 값을 넣을 때 사용합니다.
ToString()의 포맷 종류
float a = 12.3456;
Console.WriteLine(a.ToString("N2"));
결과: 12.34
이번에 처음 알게된 포맷으로 ToString()안에 문자열로 N2를 적으면 소숫점이 2자리까지만 출력됩니다. 이 이외의 포맷에 대해 한번 찾아보았습니다.

챗GPT에게 물어본 결과 이러한 종류의 포맷이 있음을 확인할 수 있습니다.
"N?"
소수점의 n자리까지 표시해 주는 포맷으로 N1은 한자리, N2는 두자리... N6는 6자리까지 표시하게 해줍니다.
"F"
N과 비슷하게 소숫점의 n자리까지 표시해 주게 하지만, 차이점이라면 콤마가 붙지 않습니다.
float a = 1234.5678;
a.ToString("N2"); // 1,234.57
a.ToString("F2"); // 1234.57
끝이 6이 아닌 7인 이유는 포맷을 할 경우 반올림이 되기 때문입니다.
"C"
C는 해당 지역 기준 화폐의 기호를 추가해줍니다. 대한민국의 기준으로는 원화 기호가 추가됩니다.
"E"
E는 지수 표기법으로 출력을 나타내는 포맷 입니다. 너무 긴 수나, 작은 수를 간단하게 표기할 때 사용합니다.
위는 GPT에게 물어본 지수 표기법으로 1.0E+05면은 1 * 10의 5제곱이라는 예시를 통해 간단히 알수 있었습니다.
"P"
P는 백분율을 나타내주는 포맷 입니다. 100을 곱하고 %기호를 붙여주는 단순한 방식이지만, 최대값을 1로 지정하는 상황에서는 유용하게 사용할 수 있습니다.
"D"
D는 정수를 출력해주는 동시에 자릿수를 표현해주기도 합니다.
int a = 42;
a.ToString(D3); // 042
a.ToString(D4); // 0042
int값만 이렇게 바꿀 수 있습니다. 실수값을 넣을 경우 예외처리가 되거나 무시될 수 있습니다.

이건 개인적으로 놀랐던 부분으로 그간 값을 다르게 매기거나 if문을 이용해 뒤집었던 반면, 이 코드는 아주 간략하게 그 내용을 줄여 저를 놀라게 만들었습니다.
direction *= -1
1 * -1 = -1
-1 * -1 = 1
이 점을 이용한 듯 보이지만, 이 간단한 식 덕분에 코드를 획기적으로 줄일 수 있게 되었습니다.
Comments