안녕하세요! 인디 게임을 개발하는 라메드 입니다!!!
오늘도 활기차게 인사드립니다.
오늘은 작업한 것을 기록하기도 하고, 나중에 보고 참고하기도 하고,
다른 분들에게 낯선 경험을 소개시켜드리려고 이렇게 포스팅합니다.
게임에서는 무한한 돈, 경험치등 을 가질 수 있을까요?
대부분의 유저는 "네" 라고 대답할 수도 있습니다.
하지만, 사실은 그렇지 않습니다.
그 이유는 게임 내에 사용되는 데이터는 그 한계를 가지고 있기 때문입니다.
위에 그려진 컵이 우리의 데이터를 담아줄 데이터 타입이라고 생각해봅시다.
컵에 넘치지 않을 정도로 데이터를 담으면 아무 문제가 없습니다.
하지만, 데이터 타입의 한계보다 큰 데이터는 이 데이터 타입(컵)으로는 나타내기가 힘듭니다.
그래서 컴퓨터는 자동으로 한계치를 , 가장 작은 한계치까지 넘겨 버립니다.
99까지 카운트 할 수 있는 자료형이라면, 100을 넣는 순간 1이 되어버리는 것이죠.
이를 "오버플로우"라고 합니다. (넘쳐 흐른다고 쉽게 생각하셔도 될 것 같아요! )
자주 사용하는 데이터 타입인 int는 2147483647 가 한계치라고 합니다 ㅎㅎ.
그래서 오버워치라는 게임에서, 계속해서 패배하다보면 점수가 0 점 밑으로 내려가게 되어
갑자기 만점인 5000이 되는 버그가 이슈가 되기도 했습니다. ( 이는 언더플로우 라고 합니다. )
이러한 버그들을 해결하기 위해선 어떻게 하면 될까요 'ㄴ'?
답은 의외로 단순합니다.
대빵 - 큰 범위를 가진 데이터 타입을 사용하면 됩니다.
그중 유명한 것이 BigInteger입니다.
(원래는 최신 버전의 C#에서 지원하지만, 유니티의 씨샵 버전이 낮기 때문에,
저는 https://github.com/keiwando/biginteger 에서 다운로드 했습니다. )
저는 이런 식으로 0000 마다 한국 식 단위를 붙여줘 보았습니다!
아주 잘 작동합니다!
읽어주셔서 감사합니다 ^^~