Godot에서 낮-밤 주기를 구현하는 방법

게임에서 낮과 밤의 변화는 몰입도를 높이는 중요한 요소이며, 시각적인 다양성과 흥미로운 게임 메커니즘을 제공합니다. Minecraft, Animal Crossing, Don’t Starve와 같은 게임은 이러한 기능을 성공적으로 활용하고 있으며, 특히 실시간 요소가 포함된 게임에 적용해 볼 만합니다.

Godot 4 엔진에서는 이러한 낮/밤 주기를 구현하는 것이 이전보다 훨씬 쉬워졌습니다.

Godot 게임 환경 설정

낮/밤 주기 시스템을 구축하기 전에 게임의 기본 구조를 설정해야 합니다. Godot 4에서 새로운 2D 프로젝트를 시작하고, 필요한 설정들을 적용하세요.

본 문서에서 사용된 코드는 다음 GitHub 저장소에서 MIT 라이선스 하에 자유롭게 이용할 수 있습니다: GitHub 저장소

먼저 플레이어 캐릭터를 만들어 보겠습니다. CharacterBody2D 노드를 장면에 추가하고, 그 안에 CollisionShape2D를 넣고 직사각형 모양과 Sprite2D를 추가하여 캐릭터를 시각적으로 나타냅니다.

플레이어가 움직일 수 있게 하려면 다음 GDScript 코드를 활용하세요. 이 스크립트를 캐릭터 노드에 연결합니다.

 extends CharacterBody2D

var speed = 300

func _physics_process(delta):
    var input_dir = Vector2.ZERO

    if Input.is_action_pressed("ui_left"):
        input_dir.x -= 1

    if Input.is_action_pressed("ui_right"):
        input_dir.x += 1

    if Input.is_action_pressed("ui_up"):
        input_dir.y -= 1

    if Input.is_action_pressed("ui_down"):
        input_dir.y += 1

    velocity = input_dir.normalized() * speed
    move_and_collide(velocity * delta)

이 코드를 사용하면 플레이어가 화살표 키를 사용하여 좌, 우, 위, 아래로 이동할 수 있습니다. 플레이어가 피해야 할 적을 추가하려면 StaticBody2D 노드를 사용하고 필요에 따라 모양과 위치를 조정하십시오.

낮과 밤 주기를 위한 타이머 추가

낮/밤 주기를 구현하려면 낮과 밤 단계를 번갈아 가며 실행되는 타이머가 필요합니다. 이 타이머는 게임 내 시간 흐름을 추적하는 데 사용됩니다.

Godot 장면에 Timer 노드를 추가합니다. 장면 패널을 우클릭하고 ‘노드 추가’를 선택한 후, 노드 라이브러리에서 ‘타이머’를 검색하면 됩니다.

Timer 노드의 이름을 ‘DayNightTimer’와 같이 의미 있게 변경합니다. 속성 창에서, Wait Time 속성을 0으로 설정하고, One Shot 속성을 활성화하여 타이머가 반복되도록 합니다.

이제 낮/밤 주기를 관리할 GDScript 코드를 추가합니다.

 extends Node2D

var day_duration = 30
var night_duration = 30

var is_day = true

func _ready():
    
    $DayNightTimer.start()

func _on_DayNightTimer_timeout():
    if is_day:
        
        $DayNightTimer.start(day_duration)
        is_day = false

        
    else:
        
        $DayNightTimer.start(night_duration)
        is_day = true

        

_ready 함수에서 장면이 로드될 때 DayNightTimer를 시작하여 낮/밤 주기를 개시합니다. _on_DayNightTimer_timeout 함수는 타이머가 0에 도달할 때마다 실행되며 (즉, 낮과 밤 사이의 전환 시점), is_day 변수를 사용하여 현재 낮인지 밤인지를 판별합니다.

이 단계를 완료하면 기능적인 낮/밤 타이머를 갖게 되며, 게임 시간 흐름에 따라 동적인 게임플레이와 시각적 변화를 Godot 게임에 추가할 수 있습니다.

낮과 밤에 따른 배경 조정

낮/밤 주기에 맞춰 시각적인 변화를 주기 위해서는 낮과 밤의 전환을 시각적으로 표현하는 방법이 필요합니다. 내장된 ColorRect 노드를 사용하여 낮과 밤에 적합한 배경을 만들 수 있습니다. 이 방법을 통해 전환을 더욱 부드럽게 하고 시각적 요소에 대한 제어력을 높일 수 있습니다.

Godot 장면에 ColorRect 노드를 추가하고, 이 노드의 이름을 BackgroundRect와 같이 의미 있게 바꿉니다. 이 노드는 낮과 밤을 표현하기 위해 색상이 변경되는 배경 역할을 합니다. 이 배경이 전체 뷰포트를 덮도록 레이어 순서를 조정합니다.

속성 창에서 Color 속성을 낮을 나타내는 배경색으로 설정합니다. 예를 들어, 밝은 하늘색의 낮 배경에는 Color(0.5, 0.5, 0.8)을 사용할 수 있습니다.

이제 ColorRect 노드를 동작시키기 위해 GDScript 코드를 업데이트합니다.

 func _on_day_night_timer_timeout():
    if is_day:
        
        $DayNightTimer.start(day_duration)
        is_day = false

        

        
        $BackgroundRect.color = Color(0.5, 0.5, 0.8)
    else:
        
        $DayNightTimer.start(night_duration)
        is_day = true

        

        
        $BackgroundRect.color = Color(0, 0, 0)

시간 변화를 반영하기 위해 BackgroundRect 노드의 색상을 업데이트합니다. 예를 들어 밤으로 전환할 때 어두운 배경을 만들기 위해 검은색으로 설정하고, 낮으로 전환할 때 밝은 파란색으로 설정합니다.

낮과 밤 주기에 대한 음향 효과

음향 효과는 Godot의 낮과 밤 주기에서 몰입감과 현실성을 높이는 데 중요한 역할을 합니다. 플레이어에게 청각적인 단서를 제공하여 낮과 밤 사이의 전환을 더욱 실감나게 만듭니다. Godot 게임에 음향 효과를 쉽게 추가할 수 있습니다.

시작하기 전에 낮과 밤을 나타내는 오디오 리소스(음악 파일)가 있는지 확인하세요. 예를 들어, 낮에는 새소리, 밤에는 귀뚜라미나 부엉이 소리를 사용할 수 있습니다.

Godot 장면에 AudioStreamPlayer2D 노드를 두 개 추가하고 적절하게 이름을 지정합니다. 예를 들어, $DaytimeSounds 및 $NighttimeSounds와 같은 이름을 사용할 수 있습니다.

이제 낮과 밤 사이의 사운드 전환을 관리하도록 GDScript 코드를 업데이트합니다.

 func _on_day_night_timer_timeout():
    if is_day:
        
        $DayNightTimer.start(day_duration)
        is_day = false
     
        
        $NighttimeSounds.stop()
        $DaytimeSounds.play()
         
    else:
        
        $DayNightTimer.start(night_duration)
        is_day = true

        
        $DaytimeSounds.stop()
        $NighttimeSounds.play()

낮/밤 타이머의 시간이 초과되면 코드는 현재 시간대에 따라 어떤 소리를 재생해야 하는지 확인하고, 해당 소리를 재생합니다.

게임의 주제와 분위기에 맞게 저작권이 없는 음향 효과를 자유롭게 사용자 정의할 수 있습니다. 여러 오디오 트랙을 레이어링하거나 오디오 효과(반향, 울림 등)를 사용하여 더욱 풍부한 청각적 경험을 만들 수도 있습니다.

낮과 밤 주기로 Godot 게임의 몰입도 높이기

Godot 게임에 낮/밤 주기를 구현하면 플레이어 몰입도와 참여도를 크게 높일 수 있습니다. 게임 세계에 깊이를 더하고, 역동적인 게임플레이 요소를 도입하며, 창의적인 스토리텔링을 가능하게 합니다.

낮과 밤 주기를 게임 고유의 테마와 메커니즘에 맞게 조정하고, 다양한 시각적 효과와 게임플레이 효과를 실험하여 정말 매력적인 게임 경험을 만드십시오.