Tạo hệ thống đối thoại trong Godot bằng GDScript

Spread the love

Trong quá trình phát triển trò chơi, lối chơi hấp dẫn và cách kể chuyện lôi cuốn là chìa khóa để tạo ra những trải nghiệm đáng nhớ. Một công cụ mạnh mẽ có thể giúp bạn đạt được điều này là hệ thống đối thoại.

Với hệ thống đối thoại được triển khai tốt, các nhân vật có thể giao tiếp, chia sẻ thông tin và tương tác với người chơi, tăng thêm chiều sâu và sự đắm chìm cho trò chơi của bạn.

Thiết lập trò chơi Godot của bạn

Bắt đầu bằng cách tạo nền tảng cho trò chơi của bạn. Trong ví dụ này, hãy thiết lập môi trường 2D đơn giản với nhân vật có thể điều khiển được, có thể di chuyển xung quanh bằng các phím mũi tên.

Mã được sử dụng trong bài viết này có sẵn trong này Kho lưu trữ GitHub và bạn có thể sử dụng miễn phí theo giấy phép MIT.

Bắt đầu bằng cách tạo cảnh mới cho nhân vật người chơi của bạn. Bên trong cảnh này, thêm các thành phần cần thiết. Tạo nút CharacterBody2D để thể hiện cơ thể của nhân vật người chơi. Đính kèm CollisionShape2D có hình chữ nhật để xác định vùng va chạm của người chơi.

Bây giờ, thêm chuyển động của nhân vật và tương tác với các nền tảng bằng GDScript. Thay thế tập lệnh mặc định của nút CharacterBody2D bằng mã sau:

 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)

Tập lệnh này cho phép nhân vật của bạn di chuyển sang trái, phải, lên và xuống dựa trên các phím mũi tên đầu vào. Hàm move_and_collide đảm bảo rằng nhân vật tương tác với các nền tảng và phản hồi khi có va chạm.

  Cách thiết lập iCloud trên máy Mac của bạn

Thêm hộp thoại

Bây giờ, bạn có thể bắt đầu tạo hệ thống đối thoại. Bước đầu tiên là thêm một hộp thoại sẽ hiển thị văn bản khi nhân vật của bạn tương tác với các đối tượng hoặc NPC cụ thể.

Trong tập lệnh CharacterBody2D của bạn, hãy giới thiệu thêm một số biến để xử lý hộp thoại và nội dung của nó:

 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 sẽ chịu trách nhiệm hiển thị văn bản hội thoại, trong khi close_button sẽ cho phép người chơi đóng hộp thoại khi cần.

Trong hàm _ready, tạo và khởi tạo hộp thoại:

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

Hiển thị văn bản hội thoại

Bây giờ bạn có thể tập trung vào việc hiển thị văn bản trong hộp thoại. Bạn có thể làm cho văn bản trải dài trên nhiều dòng và cuộn văn bản đó, hiển thị từng dòng văn bản một.

Sửa đổi hàm _physical_process của bạn để xử lý việc hiển thị các dòng hội thoại:

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

Đoạn mã này kiểm tra xem line_timer có lớn hơn 0 hay không. Nếu đúng như vậy, nó sẽ giảm bộ đếm thời gian xuống giá trị delta. Nếu bộ hẹn giờ không hoạt động và có nhiều dòng hội thoại hơn cần hiển thị, nó sẽ gọi hàm show_next_dialogue_line.

Triển khai hàm show_next_dialogue_line như sau:

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

   
    line_timer = 3.0

Hàm này cập nhật văn bản trong hộp thoại với dòng hội thoại hiện tại và tăng chỉ số current_line. line_timer đảm bảo rằng mỗi dòng được hiển thị trong một khoảng thời gian ngắn trước khi chuyển sang dòng tiếp theo.

Thêm nút đóng

Giờ đây, bạn có thể cung cấp cho người chơi khả năng đóng hộp thoại và tiếp tục chơi trò chơi. Thực hiện việc này bằng một nút đóng mà khi họ nhấn nó, hộp thoại sẽ ẩn đi và cho phép người chơi tiếp tục cuộc hành trình của mình.

  Cách thêm tiền vào Apple ID Wallet

Đầu tiên, sửa đổi hàm _ready để tạo nút đóng và đính kèm chức năng của nó.

 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)

Mã này tạo một thể hiện của lớp Button và tùy chỉnh hình thức cũng như vị trí của nó. Nó cũng kết nối tín hiệu được nhấn với hàm _on_close_button_press.

Bây giờ hãy triển khai hàm _on_close_button_press. Trong chức năng này, đặt mức độ hiển thị của cả hộp thoại và nút đóng thành sai. Điều này giúp ẩn giao diện hội thoại khỏi người chơi một cách hiệu quả.

Hãy nhớ đặt lại chỉ mục current_line về 0 để đảm bảo rằng cuộc đối thoại sẽ bắt đầu lại từ đầu vào lần tiếp theo người chơi bắt đầu cuộc trò chuyện:

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

Với những thay đổi này, người chơi sẽ có thể tham gia đối thoại và đóng hộp thoại khi họ sẵn sàng tiếp tục khám phá hoặc tương tác với thế giới trò chơi.

Các phương pháp hay nhất cho hệ thống đối thoại của bạn

Khi bạn tiếp tục phát triển và cải tiến hệ thống đối thoại của mình, hãy ghi nhớ các phương pháp hay nhất sau đây sẽ giúp đảm bảo rằng hệ thống của bạn nâng cao cách kể chuyện trong trò chơi và mức độ tương tác của người chơi ở mức tối đa.

Tính nhất quán là chìa khóa

Duy trì giọng điệu, phong cách viết và từ vựng nhất quán trong toàn bộ hệ thống hội thoại của bạn. Tính nhất quán giúp người chơi kết nối với các nhân vật và thế giới trò chơi, tạo ra trải nghiệm liền mạch và hấp dẫn.

Giọng nói nhân vật thủ công

Mỗi nhân vật phải có giọng nói và tính cách riêng biệt được phản ánh trong lời thoại của họ. Hãy xem xét lý lịch, động cơ và cảm xúc của họ khi viết dòng của họ.

Sự khác biệt này tạo thêm chiều sâu cho nhân vật của bạn và làm cho các tương tác trở nên đáng nhớ hơn. Bạn có thể dễ dàng thêm các âm thanh khác nhau cho các nhân vật khác nhau trong Godot.

  Cách điện thoại thông minh đánh cắp sự chú ý của bạn và cách bảo vệ sức khỏe tinh thần của bạn

Những lựa chọn có ý nghĩa

Thiết kế các lựa chọn đối thoại có hậu quả có ý nghĩa. Các lựa chọn tác động đến câu chuyện, mối quan hệ hoặc thậm chí cơ chế chơi trò chơi của trò chơi sẽ khuyến khích người chơi tương tác với hệ thống đối thoại và đầu tư cảm xúc vào các quyết định của họ.

Kiểm tra và lặp lại

Kiểm tra kỹ lưỡng các đoạn hội thoại của bạn để phát hiện mọi lỗi chính tả, lỗi ngữ pháp hoặc vấn đề về nhịp độ. Tham gia vào quá trình chơi thử để thu thập phản hồi từ người chơi và thực hiện các điều chỉnh cần thiết nhằm đảm bảo hệ thống đối thoại diễn ra suôn sẻ và nâng cao trải nghiệm chơi trò chơi tổng thể.

Tính nhất quán của giao diện người dùng

Đảm bảo rằng thiết kế và cách trình bày của hệ thống đối thoại phù hợp với thiết kế giao diện người dùng (UI) tổng thể của trò chơi của bạn. Các thành phần giao diện người dùng, phông chữ và màu sắc nhất quán tạo ra trải nghiệm hình ảnh gắn kết, góp phần tạo nên sự hấp dẫn cho trò chơi.

Bằng cách làm theo những phương pháp hay nhất này, bạn có thể tạo ra một hệ thống đối thoại không chỉ nâng cao cốt truyện trong trò chơi mà còn tạo ra trải nghiệm đáng nhớ và hấp dẫn cho người chơi.

Nâng tầm trò chơi Godot của bạn bằng hệ thống đối thoại

Việc kết hợp hệ thống đối thoại vào trò chơi Godot của bạn có thể cải thiện mức độ tương tác của người chơi và cách mạng hóa cách kể chuyện của bạn. Bằng cách cho phép các nhân vật giao tiếp, thể hiện cảm xúc và phản ứng với các quyết định của người chơi, bạn sẽ tạo ra một thế giới trò chơi hấp dẫn và tương tác hơn.

Với môi trường thân thiện với người dùng của Godot và sức mạnh của GDScript, bạn có các công cụ để tạo ra hệ thống đối thoại hấp dẫn thu hút người chơi vào câu chuyện của bạn và nâng cao trải nghiệm chơi trò chơi tổng thể của họ.

x