이 카테고리는 고도 엔진(Godot Engine) 관련 문법을 기록하고 저장하기 위해 만든 공간입니다.
이번에는 RPG 게임에서 검을 휘두를 때마다 데미지가 10~15 사이로 다르게 들어가고, 몬스터를 잡았을 때 30% 확률로 희귀한 아이템이 떨어지는 것을 본 적이 있으실 겁니다. 게임에 '예측 불가능한 재미(무작위성)'를 불어넣는 핵심 기술이 바로 난수(Random Number)입니다. 고도 엔진에서 가장 자주 쓰이는 난수 생성 함수들을 알아보겠습니다.
1. randi_range(): 주사위 굴리기 (정수 난수)
randi는 Random Integer(무작위 정수)의 줄임말입니다. 기본 randi() 함수는 0부터 엄청나게 큰 숫자(약 42억) 사이의 무작위 숫자를 뱉어내기 때문에 그대로 쓰기에는 조금 불편합니다. 그래서 실전에서는 최소값과 최대값을 직접 지정할 수 있는 randi_range()를 훨씬 더 많이 사용합니다.
GDScript
func attack():
# 1. 10부터 15 사이의 '정수(10, 11, 12, 13, 14, 15)' 중 하나를 무작위로 뽑습니다.
var damage = randi_range(10, 15)
print("몬스터에게 ", damage, "의 데미지를 입혔습니다!")
# 2. 1부터 6까지, 6면체 주사위를 굴립니다.
var dice_roll = randi_range(1, 6)
2. randf_range()와 randf(): 디테일한 조정과 확률 (실수 난수)
randf는 Random Float(무작위 실수/소수점)의 줄임말입니다. 정수와 달리 소수점 아래까지 쪼개지는 숫자가 필요할 때 사용합니다. 타이머의 대기 시간을 무작위로 설정하거나, 화면 내의 무작위 X 좌표에 몬스터를 소환할 때 유용합니다.
특히 괄호 안이 비어있는 기본 randf()는 0.0에서 1.0 사이의 실수를 반환하는데, 이를 활용하면 게임에서 'n% 확률로 성공' 같은 시스템을 아주 쉽게 만들 수 있습니다.
func spawn_monster():
# 1. 화면의 X좌표 100.0 ~ 800.0 사이의 임의의 위치(소수점 포함)를 뽑습니다.
var random_x = randf_range(100.0, 800.0)
position.x = random_x
func open_chest():
# 2. 30% 확률로 희귀 아이템 드랍하기
# randf()는 0.0 ~ 1.0을 반환하므로, 0.3 이하일 확률은 정확히 30%가 됩니다.
if randf() <= 0.3:
print("축하합니다! 전설의 검을 획득했습니다!")
else:
print("평범한 돌멩이가 나왔습니다.")
3. pick_random(): 배열에서 아무거나 하나 뽑기 (보너스 팁)
고도 엔진의 배열(Array)에는 아주 강력하고 편리한 내장 함수인 pick_random()이 있습니다. 아이템 목록이나 적들의 이름 목록을 배열로 만들어두고, 그중 하나를 무작위로 추첨하고 싶을 때 복잡한 계산 없이 단 한 줄로 해결할 수 있습니다.
var loot_table = ["포션", "골드", "화살", "폭탄"]
func get_random_loot():
# 배열에 들어있는 4개의 아이템 중 하나를 무작위로 선택해서 반환합니다.
var dropped_item = loot_table.pick_random()
print(dropped_item, "을(를) 주웠습니다!")
한눈에 보는 난수 생성 핵심 요약
| 함수 / 기능 | 기능 설명 | 실전 디버깅 활용 예시 |
| randi_range(min, max) | min과 max 사이의 무작위 정수를 반환합니다. (min, max 포함) | 무기 데미지 계산 (10~15), 주사위 굴리기, 획득 골드량 결정 |
| randf_range(min, max) | min과 max 사이의 무작위 **실수(소수점)**를 반환합니다. | 몬스터 스폰 위치(좌표) 결정, 1.5초~3.0초 사이의 랜덤한 공격 딜레이 |
| randf() | 0.0부터 1.0 사이의 무작위 실수를 반환합니다. | 0.1(10%), 0.5(50%) 등 확률 시스템을 구현할 때 (if randf() <= 확률:) |
| 배열.pick_random() | 배열(Array) 안에 들어있는 데이터 중 하나를 무작위로 뽑습니다. | 보물상자에서 여러 종류의 아이템 중 하나를 무작위로 떨어뜨릴 때 |
| randi() | 0부터 약 42억 사이의 무작위 정수를 반환합니다. | (범위가 너무 넓어 게임 플레이 로직보다는 암호화나 난수 시드 등에 주로 쓰임) |
'게임 > 고도엔진 문법' 카테고리의 다른 글
| 24. [고도 엔진] 시간에 따른 동작 제어: Timer 노드와 코드 타이머 생성 (0) | 2026.07.11 |
|---|---|
| 22. [고도 엔진] 게임 도중 총알 발사하기: 코드로 씬(Scene) 생성(instantiate) (0) | 2026.07.10 |
| 21. [고도 엔진] 키보드와 마우스 입력받기: Input 싱글톤과 _input() 함수 (0) | 2026.07.09 |