Contents

使用 GDScript 在 Godot 中創建對話系統

在遊戲開發中,引人入勝的遊戲玩法和引人入勝的故事講述是創造難忘體驗的關鍵。對話系統是可以幫助您實現這一目標的一個強大工具。

正確執行的對話機制使角色能夠與玩家交談、交換數據和聯繫,從而增強遊戲體驗的豐富性和身臨其境的質量。

設置你的 Godot 遊戲

通過構建遊戲的基本結構來啟動開發過程。在這種情況下,建立一個基本的二維設置,其中包含一個可以使用箭頭鍵進行導航的頭像。

本出版物中使用的源代碼可以通過 GitHub 上的公共存儲庫訪問,該存儲庫根據廣泛接受的 MIT 許可證條款免費提供源代碼,以方便您使用。

通過為玩家角色的存在啟動新的設置,將給定的代碼片段合併到 Unity 中。引入CharacterBody2D對象的實例並將其連接到場景。然後,附加一個具有矩形形式的“ CollisionShape2D ”組件,以確定玩家與遊戲世界中其他對象交互的邊界。

通過利用 GDScript 替換 CharacterBody2D 組件的默認腳本,將角色移動性和交互性與基於平台的對象結合起來。提供的代碼如下:

 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)

當前的代碼使主角能夠通過箭頭鍵命令進行導航,促進他們在各種平台上前進,同時考慮到可能發生的任何交互或碰撞。

/bc/images/simple-game-in-godot.jpg

添加對話框

當開始開發對話系統時,初始階段涉及合併一個界面,用於在玩家角色與特定對像或非玩家角色 (NPC) 之間交互時顯示文本。

為了增強“CharacterBody2D”腳本的功能,我們應該合併其他變量,使我們能夠有效地管理對話框及其內容。這可以通過引入新變量來實現,例如“_dialogBox”、“_previousLine”和“_currentLine”。前者將保存對對話框對象的引用,而後兩者將分別表示在文本字段中鍵入的當前行和上一行。通過利用這些變量,我們可以實現諸如歷史記錄和鍵入時輸入文本字段的實時更新等功能。

 var dialogue_box: Label
var close_button: Button
var dialogue_lines: Array = ["Hello, adventurer!", "Welcome to our village."]

var current_line: int = 0
var line_timer: float = 0 

“dialog_box”旨在顯示對話內容,而“close_button”則用於讓用戶在認為必要時關閉對話框。

在“ready”函數中,我將為我們的應用程序創建並初始化一個對話框。該對話框對於在用戶和程序之間提供接口至關重要,使他們能夠以有意義的方式與之交互。對話框可以根據用戶或程序正在執行的操作來顯示各種消息或提示。此外,此對話框充當我們稍後添加的其他組件的容器,例如按鈕或文本字段,這將使用戶能夠在應用程序中輸入數據或執行特定任務。

 func _ready():
    dialogue_box = Label.new()
    dialogue_box.visible = false
    add_child(dialogue_box) 

顯示對話文本

您現在可以專注於在對話框中呈現內容。可以將文本擴展到多行並啟用滾動,一次僅顯示一行。

要修改物理過程函數以適應對話線的顯示,請按照下列步驟操作:1。添加一個名為“dialogueLines”的新變量來存儲每行對話的文本數據。這可以通過創建一個空數組並將其分配給所需對像或腳本中的“dialogueLines”鍵來完成。2。更新模擬循環以包括對白台詞的處理。在此循環中,使用索引值作為標識符從“dialogueLines”數組中檢索文本數據。然後,根據原始設計文檔中定義的屬性相應地更新對話氣泡的定位和渲染。

 if line_timer > 0:
    line_timer -= delta
elif current_line < dialogue_lines.size():
    show_next_dialogue_line() 

給定的代碼段評估 line\_timer 變量的值是否超過某個閾值。如果此條件成立,則計時器的值將減少指定的增量值。此外,如果計時器當前處於非活動狀態並且還有其他對話內容需要顯示,則將調用 show\_next\_dialogue\_line 子例程。

實現 show_next_dialogue_line 函數如下:

 func show_next_dialogue_line():
    dialogue_box.text = dialogue_lines[current_line]
    current_line \+= 1

   # Display each line for 3 seconds
    line_timer = 3.0 

當前函數用最近的話語修改對話氣泡中包含的文本,並提高當前行計數器的值。計時器(稱為“line\_timer”)調節在繼續處理後續消息之前每個語句在屏幕上保持可見的持續時間。

/bc/images/text-in-godot.jpg

添加關閉按鈕

您現在可以授予玩家關閉對話窗口並繼續玩遊戲的選項。這可以通過在對話框中合併一個“關閉”按鈕來實現,按下該按鈕後,會隱藏所述窗口並使參與者能夠重新加入遊戲進程。

修改現有的“ready”函數,以便通過在打開模態窗口的事件偵聽器函數中合併關閉按鈕所需的 HTML 代碼來生成具有相應功能的關閉按鈕。

 func _ready():
    dialogue_box = Label.new()
    dialogue_box.visible = false
    add_child(dialogue_box)

    close_button = Button.new()
    close_button.text = "Close"
    close_button.position = Vector2(50, 30)
    close_button.visible = false
    close_button.pressed.connect(_on_close_button_pressed)
    add_child(close_button) 

提供的代碼生成一個Button對象,定制其視覺呈現和位置,並在按下事件信號和\_on\_close\_button\_pressed\*函數之間建立連接。

在“GameUIManager”類中合併一個名為“_on_close_button_pressed”的新方法。在此函數中,確保對話框的可見性及其關閉按鈕均設置為“ false ”。這樣做後,用戶將無法再查看對話界面或與對話界面交互。

為了重新開始,明智的做法是將當前行索引恢復到其原始狀態零,以保證我們的對話在參與者提示通信的每次實例中重新開始:

 func _on_close_button_pressed():
    dialogue_box.visible = false
    close_button.visible = false
    current_line = 0 

通過此修改,參與者將能夠參與對話並自行決定關閉對話框,從而使他們能夠根據需要繼續在數字環境中導航或交互。

/bc/images/buttons-in-godot.jpg

對話系統的最佳實踐

在逐步改進和完善對話模型的過程中,持續關注這些推薦的指南可以促進玩家的敘事深度和沈浸感的最佳豐富。

一致性是關鍵

保持統一的語言方法對於培養玩家和遊戲角色之間的真實聯繫,同時促進虛擬環境中的凝聚力氛圍至關重要。這種堅定不移的一致性能夠在玩家和敘事之間建立融洽的關係,從而通過確保平穩且引人入勝的冒險來增強他們的整體體驗。

製作角色聲音

為了創造真實且引人注目的角色,重要的是賦予每個人獨特的聲音和氣質,這些聲音和氣質源自他們的背景故事、目標和感受。這將使讀者或觀眾更好地理解他們並在情感層面上與他們建立聯繫。

為每個角色融入獨特的言語模式和舉止,不僅增強了他們的個性,而且還有助於他們之間令人難忘的交流,因為它提供了區分一個性格和另一個性格的獨特標識符。幸運的是,在 Godot 框架內實現這些變化很簡單,允許開發人員以最少的努力創建不同的音頻提示。

有意義的選擇

納入對故事情節和玩家角色互動具有重大影響的選擇結果。通過影響情節發展、人際動態或核心遊戲規則等方面,這些相應的選擇會激勵用戶積極參與對話序列並培養對其選擇的情感承諾。

測試和迭代

通過徹底檢查拼寫錯誤、語法不一致和節奏失衡,對對話序列進行全面評估。採用遊戲測試技術收集玩家的見解並根據需要進行修改,以保證通過對話系統實現無縫交互和增強的遊戲體驗。

用戶界面一致性

在設計視頻遊戲的對話系統時,確保其外觀和佈局與遊戲更廣泛的用戶界面設計保持一致非常重要。保持字體樣式、配色方案和其他圖形元素等視覺組件的一致性可以通過促進遊戲各個方面的統一外觀來幫助營造沉浸式遊戲環境。

遵循這些推薦的方法可以開發基於對話的系統,這不僅可以提升遊戲中的故事講述,還可以為玩家帶來難忘的身臨其境的體驗。

通過對話系統提升你的戈多遊戲

在 Godot 遊戲中集成基於對話的系統有可能增強玩家的參與度並改變敘事技巧。通過促進角色交流、情感表達和對玩家選擇的響應,創建了一個越來越身臨其境且相互關聯的遊戲環境。

利用 Godot 提供的直觀平台並利用其腳本語言 GDScript 的功能,開發人員能夠創建引人入勝的對話系統,有效地讓玩家沉浸在引人入勝的敘述中,並提升他們的整體遊戲體驗。