Skip to content

Bắt đầu nhanh ​

Ba bước. Không phải học gì trước.

1. Thêm node ​

Bật NPC TalkKit ở Project Settings → Plugins, rồi thêm node NPCTalkKit làm con của một NPC bạn đã có.

Player controller, nhiệm vụ và save game không bị đụng tới. Không có autoload, không có class cha nào phải kế thừa.

2. Gõ lời thoại ​

Chọn node rồi bấm Open Editor trong thẻ tóm tắt ở Inspector, hoặc mở main screen TalkKit trên thanh đầu Godot. Trong Conversations, bấm +, đặt tên greeting, rồi gõ. Enter sang câu tiếp theo; ở câu cuối nó tạo thêm câu.

Không file nào được tạo ra. Hội thoại nằm trong scene, giống như animation nằm trong AnimationPlayer.

Workspace TalkKit với một hội thoại, ba câu text-first, preview trực tiếp và thẻ Inspector gọn

3. Phát nó ​

gd
extends Node

## Docs: /guide/quick-start — the whole surface needed to say two lines.

func _ready() -> void:
	_build_without_files()


#region play
# Nothing here needs a .tres file. The conversation was typed in the TalkKit
# workspace, and this is the entire runtime surface.
func greet() -> void:
	$NPCTalkKit.play(&"greeting")
#endregion


## Builds in code what the TalkKit workspace builds by hand, so this file runs.
func _build_without_files() -> void:
	var talk := NPCTalkKit.new()
	talk.name = "NPCTalkKit"
	var smith := TalkSpeaker.new()
	smith.display_name = "Torvald"
	talk.speakers = [smith]
	var box := _instant_box()
	talk.dialogue_boxes = [box]

	var conversation := TalkConversation.new()
	conversation.conversation_id = &"greeting"
	conversation.default_speaker = smith
	conversation.default_dialogue_box = box
	var first := TalkLine.new()
	first.text = "The forge runs hot today."
	var second := TalkLine.new()
	second.text = "Come back when you need steel."
	conversation.lines = [first, second]
	talk.conversations = [conversation]
	add_child(talk)


func _verify() -> Array[String]:
	var failures: Array[String] = []
	var spoken: Array[String] = []
	var talk: NPCTalkKit = $NPCTalkKit
	talk.line_started.connect(func(line: TalkLine) -> void: spoken.append(line.text))

	greet()
	if not talk.is_running():
		failures.append("quick_start: play() did not start the conversation")
	talk.advance()
	talk.advance()
	if spoken.size() != 2:
		failures.append("quick_start: expected two lines, got %s" % str(spoken))
	if talk.is_running():
		failures.append("quick_start: the conversation should have ended")
	return failures


## Typing speed lives on the dialogue box now, so turning it off for a scripted
## run means handing the node a box that types instantly.
func _instant_box() -> TalkBoxTemplate:
	var template := TalkBoxTemplate.new()
	template.typewriter_speed = 0.0
	return template

Đó là toàn bộ bề mặt runtime để một NPC biết nói.

Ba thứ TalkKit biết ​

Bạn có thể dừng đọc ở đây và bắt tay làm. Bảng này dành cho lúc bạn muốn đổi một trong ba thứ — chúng độc lập với nhau, nên đổi cái này không bắt bạn đổi cái kia.

Quyết địnhNằm ở đâu
Conversationnói gìtrên node, hoặc trong kho dùng chung
Dialogue Boxhộp là gì và trông thế nàomột template, dùng chung được
Placementnằm ở đâu, bám vào đâumặc định của conversation hoặc ngoại lệ của line — màn hình hoặc bám node

Script view: sắp ra mắt

Tab Script · Coming soon chỉ là bản xem trước cho workflow viết dạng text trong tương lai. Nó chưa phải định dạng có thể sửa; workspace trực quan và các resource hiện tại vẫn là nguồn dữ liệu chuẩn.

Classic Panel vẫn bám được đỉnh đầu NPC. Speech Bubble vẫn ghim được vào góc màn hình. Chọn hộp không có nghĩa là chọn luôn vị trí.

Những gì TalkKit không làm ​

Nó không quản nhiệm vụ, túi đồ, save game, điều khiển nhân vật, AI của NPC hay logic rẽ nhánh. Game của bạn đã có những thứ đó, và TalkKit được thiết kế để không đụng vào.

Muốn cho người chơi lựa chọn thì xem Sự kiện và rẽ nhánh: hội thoại tạm dừng, rồi GDScript của bạn quyết định tiếp theo là gì.

Tiếp theo ​

Ưu tiên GDScript. Addon phát hành không có telemetry, không gọi mạng, không phụ thuộc dịch vụ AI.