적이 총알을 발사하는 게임이나 하늘에서 똥이 떨어지는 게임을 만들고 싶을 때 주로 사물 발사 노든을 사용하게 됩니다.
사물 발사 노든은 기본적으로 아무런 신호를 주지 않으면 설정한 간격마다 자동으로 사물을 발사합니다. 하지만 게임이 주는 재미는 랜덤성에서 오는 것이 아니겠습니까? 피할 똥이 예측 가능한 시점에 오면 게임이 재미 없어집니다. 랜덤한 간격으로 똥을 발사 하고 싶을 경우를 위한 구조를 고안해 보았습니다.
일단 완성샷부터
공이 1초에서 10초 사이의 랜덤한 간격으로 발사되는 것을 볼 수 있습니다.
공이 랜덤한 간격으로 발사되는 구조를 보기 전에 이해에 도움이 되도록 일정 간격마다 발사되는 구조를 먼저 보도록 하겠습니다.
이 구조는 사물을 1초마다 발사하는 구조입니다. 사실 사물 발사 노든은 신호를 주지 않으면 알아서 일정 간격마다 발사하므로 1초마다 발사하는 구조를 원한다면 이렇게 짜면 낭비에요. 어디까지 이후에 설명할 랜덤 간격 발사 구조의 이해를 돕기 위해 예시로 짜 본 겁니다.
이 구조는 어째서 1초마다 사물을 발사할까요?
카운터는 그 누적값을 비교 노든에게 줍니다. 카운터 노든은 비교 노든에게 현재까지 몇 프레임이 지났는지를 알려 줍니다.
비교 노든의 2번째 입력으로 60 상수 노든이 입력되고 있습니다. 이러면 카운터의 값이 60보다 커지면 비교 노든은 신호를 출력합니다. 즉, 60프레임이 지나면 사물이 발사된다는 것입니다. 60 프레임은 1초이므로 1초가 지난 뒤에 사물이 발사되게 됩니다.
사물 노든에게 신호를 줌과 동시에 카운터 노든을 리셋시킵니다. 카운터 노든은 이제 0부터 다시 몇 프레임이 지났는지 체크할 것입니다. 이렇게 매 1초마다 사물이 발사되는 구조가 완성되었습니다.
이걸 응용하면 랜덤 간격으로도 사물을 발사시킬 수 있어요.
좀 전의 60 프레임이 지났는지 확인하기 위해 사용하면 60 상수 노든을 랜덤 프레임 간격을 생성하는 것으로 바꾸면 됩니다. 하나씩 살펴 보죠.
랜덤 노든은 지정한 범위에서 랜덤하게 아무 숫자나 출력하는 노든입니다. 저는 알기 쉽게 0~100 범위에서 랜덤하게 생성하도록 설정하였습니다. 0%~100%를 의미해요.
0~100 값을 곧바로 쓸 수 없으므로 매핑 노든을 이용합니다. 0~100으로 입력된 값을 1~10 범위의 값으로 출력합니다. 이건 1초에서 10초 사이의 랜덤 대기 시간을 의미해요,
여기서 이 1~10 값을 바로 비교 노든에게 줄 수 없습니다. 카운터가 현재 체크하고 있는 값은 초 단위의 시간이 아니라 프레임 단위의 시간이니까요. 1~10은 초 단위의 시간을 의미하므로 이를 프레임 단위의 시간으로 바꿔야 합니다.
1초에 60 프레임이므로 그냥 60을 곱하면 됩니다. 곱한 값을 이제 비교 노든에게 줍시다.
랜덤으로 생성된 프레임 시간이 지나면 비교 노든이 활성화 되고 사물 발사 노든에게 발사 신호를 줍니다.
이와 동시에 카운터를 리셋하고 랜덤 노든에게 신호를 주어 새로운 랜덤값을 생성하게 하면 위 과정이 반복되므로 랜덤 간격마다 사물을 발사할 수 있습니다!
사실 위 구조는 0~100의 균일 랜덤 분포를 자신이 원하는 값으로 변환하는 과정을 포함하기 위해서 매핑 노드와 계산 노드가 동원되었습니다. 범용적인 구조를 위해서 이렇게 설명한 것이고, 애초부터 랜덤 노든이 내가 원하는 범위의 값을 생성하게 하면 그냥 랜덤 노든의 출력을 곧바로 비교 노든에 꼿아도 됩니다. 노든을 3개나 아낄 수 있네요.
직접 뜯어 보고 싶으신 분은 해당 게임 다운로드 받으셔서 확인해 보시기 바랍니다.
(IP보기클릭)180.224.***.***
(IP보기클릭)123.212.***.***
(IP보기클릭)14.44.***.***
(IP보기클릭)220.94.***.***