Khắc phục sự cố
Node không có trong hộp thoại Create New Node
Plugin chưa được bật. Project → Project Settings → Plugins → NPC TalkKit. Nếu đã bật mà vẫn không thấy node thì thư mục đang sai chỗ: đường dẫn phải đúng là res://addons/npc_talkkit/plugin.cfg.
Sau khi di chuyển file của addon, hãy đóng rồi mở lại project. Godot cache tên class toàn cục và không phải lúc nào cũng nhận ra thay đổi.
play() trả về false và không có gì xảy ra
Nó trả false — không bao giờ ném lỗi — vì ba lý do, và mỗi lý do đều ghi một cảnh báo nói rõ là lý do nào:
| Cảnh báo | Nguyên nhân |
|---|---|
conversation '…' was not found | tên không khớp conversation_id nào trên node lẫn trong kho |
refused invalid conversation | không qua được kiểm tra; cảnh báo có kèm báo cáo |
is already running a conversation | đang có hội thoại được đọc dở — đây là cố ý, để lần bấm tương tác thứ hai không khởi động lại nó |
Nếu bạn đang trả lời một blocking event thì play() được phép — trường hợp đó không bị từ chối. Nếu vẫn trả false ở đó, hãy đọc cảnh báo kiểm tra: một nhánh không qua được kiểm tra sẽ bị từ chối, và hội thoại gốc vẫn tiếp tục chạy.
Bong bóng thoại không di chuyển
Renderer phải có get_box_control(). Anchoring và transition đều tác động lên control mà nó trả về, nên renderer tự viết mà thiếu nó sẽ trông vẫn đúng mà chẳng làm gì.
Nếu bạn đang dùng hộp có sẵn, kiểm tra xem có vị trí nào được gán với when_offscreen đặt thành HIDE trong khi mục tiêu đang ngoài màn hình không.
Bong bóng 3D sai chỗ, hoặc nhảy ngang màn hình
| Triệu chứng | Nguyên nhân |
|---|---|
| Nó nằm dưới chân nhân vật | follow_offset_3d đang bằng 0. Đó là độ cao đầu tính bằng mét trong không gian thế giới — thử Vector3(0, 1.9, 0). |
| Nó trôi khỏi đầu khi lại gần | Bạn dùng follow_offset (toạ độ màn hình) thay vì follow_offset_3d (toạ độ thế giới). |
| Nó lật sang phía đối diện màn hình | Mục tiêu đang sau lưng camera và when_offscreen để FREE. |
| Không hiện gì cả | Không có Camera3D nào đang hoạt động, hoặc mục tiêu đã vượt max_distance. |
Theme của tôi bị bỏ qua
Gán theme vào theme của template, đừng gán vào scene renderer. Khi theme được đặt, style sẽ ngừng ghi đè font, cỡ chữ và màu để theme của bạn thắng. Phần bố cục vẫn áp dụng, vì Theme không bao gồm những thứ đó.
Nếu bạn đã gán theme cho một node bên trong renderer tự viết mà vẫn bị bỏ qua, hãy tìm theme_override_* trên node đó — override luôn thắng theme.
Chữ hiện ra một lúc hết
typewriter_speed trên node đang là 0, hoặc characters_per_second được đặt trên câu thoại. Cả hai đều tính bằng "ký tự mỗi giây"; số 0 nghĩa là hiện cả câu.
Người chơi vẫn bị khoá sau khi hội thoại kết thúc
request_player_lock(false) được phát khi hội thoại kết thúc hoặc bị dừng. Nếu handler của bạn được nối sau khi play() đã gọi thì nó bỏ lỡ tín hiệu true đầu tiên và trạng thái lệch nhịp — hãy nối trong _ready().
Một id hội thoại bị báo là trùng
Id có phạm vi theo node, nên hai NPC đều có thể sở hữu một greeting — đó là cảnh báo, không phải lỗi. Lỗi chỉ được báo khi kho khai một id hai lần, hoặc khi một node khai cùng một id hai lần, lúc đó cái thứ hai không bao giờ chạy được.
Vẫn tắc
Thu thập những thứ này trước khi hỏi:
print(ProjectSettings.get_setting("application/config/features"))
print(TalkKitConstants.ADDON_VERSION)
print($NPCTalkKit.list_conversations())
print($NPCTalkKit.state)Kèm phiên bản Godot và toàn văn cảnh báo trong panel Output.