Posted in: 게임 수학

(게임 수학) 어림수 계산은 마지막에 해야 한다

어림수가 뭐에요?


어림수란 버림, 올림, 반올림하여 얻은 값을 말한다. 대충(?) 어림잡아 수를 정의한다는 것이다.

버림, 올림, 반올림에 관한 설명은 인터넷에 검색해 보자. 굳이 게시글에 기재 안 하겠다.

게임에서 사용되는 예시


게임은 [몬스터에게 대미지를 받았다]라든지 [캐릭터가 물약을 마셨다]처럼 계산 절차를 수행하는 경우가 많다. 만약 계산 결과로 6.87이란 유리수가 나와 게임 화면에 표시된다면 게임을 하는 플레이어가 혼란스러운 상황이 발생할 수 있다.

숫자 개수만 보고 [대미지가 높다], [회복이 많이 됐다]라고 착각할 수 있기 때문에 보통은 반올림하여 정수로 계산하는 게 일반적이다.

정석대로 한다면 정확한 계산을 하고 표시하는 게 맞지만, 플레이어가 게임을 하면서 “불편하다.”라는 감정을 최대한 안 느끼게 하기 위함이다.

어림수는 게임 난이도에도 활용될 수 있다.

[몬스터에게 대미지를 받았다]를 예를 들자면 [쉬움 난이도]에서는 대미지 계산에 [버림]을 하고, [어려움 난이도]에서는 [올림]을 할 수 있다.

어쨌든 게임에서는 어림수를 매우 많이 사용한다고 생각하면 된다.

어림수 사용법과 주의 사항


/* 유니티에서 실행 가능한 예제 */
using System; //Math 클래스를 사용하기 위함

void Start()
{
    //숫자의 하한(버림)
    Debug.Log("6.2835의 버림: " + Math.Floor(6.2835));

    //숫자의 상한(올림)
    Debug.Log("6.2835의 올림: " + Math.Ceiling(6.2835));

    //유리수 첫째 자리까지(반올림)
    Debug.Log("6.2835의 첫째 자리까지 반올림: " + Math.Round(6.2835, 1));

    //유리수 둘째 자리까지(반올림)
    Debug.Log("6.2835의 둘째 자리까지 반올림: " + Math.Round(6.2835, 2));
}
결과
6.2835의 버림: 6
6.2835의 올림: 7
6.2835의 첫째 자리까지 반올림: 6.3
6.2835의 둘째 자리까지 반올림: 6.28

유니티의 스크립트 언어는 C#이다. 위 예제 코드는 유니티에서 C#으로 실행 가능한 코드이며 어림수 사용법이다. 대부분 언어는 수학 라이브러리를 지원하기 때문에 적절히 검색해서 사용하자.

어림수 사용 시 주의 사항은 결국 어떤 계산을 하든 마지막에 어림수를 해야 한다는 것이다. 계산 과정 중 앞에서부터 어림수(예를 들어 반올림)를 하면 계산 결과가 달라지기 때문이다. 이는 [캐릭터 생명력]과 같은 중요한 시스템에서 큰 버그를 불러올 수 있으니 항상 주의하자!

왜 계산 결과가 달라지는지는 굳이 게시물에 기재 안 하겠다. 궁금하면 직접 해보자!

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다