Godot 4でちょっとしたプロローグを作ってみる!

2024/05/14
おはこんばんにちは!ギルガメです!

Godot 4を使って開発中のジャンプキング風のゲームにちょっとしたプロローグを追加したくて、作ってみました! とてもシンプルですが、工夫すれば色々作れそうです。

作ってみたものは下記のものになります。


やっぱり文字の表示は一気に全部を表示するより、文字を少しずつ見せると雰囲気が出るのでそれっぽくしてみました。Godot 4ではすごく簡単に実装できたのでお役に立てればと思います。

画面したいの構成は下記の画像になります。


シンプルに背景はColorRectを使って黒の背景にしています。その中にLabelを配置してTextScenarioとネーミングしています。またNextをいうAnimationSprite2Dを作って、画像の右下に見える「次」に進めるようなアイコンを点滅させるアニメーションを追加して配置しています。
またTextDelayというTimerを作って文字を一つ一つ追加して、雰囲気を出しています。

すごくシンプルです・・次にスクリプトになります。
extends CanvasLayer

@export var path = ""
@export var mainScene = preload("res://src/scenes/main.tscn")
var text_to_display = []
var current_index = 0
var current_text_index = 0

func _ready() -> void:
text_to_display = load_text_file(path)

func _on_text_delay_timeout() -> void:
if current_index < text_to_display.size():
if current_text_index < text_to_display[current_index].length():
%TextScenario.text = text_to_display[current_index].substr(0, current_text_index + 1)
current_text_index += 1
else:
%TextDelay.stop()
%Next.visible = true
else:
%TextDelay.stop()
get_tree().change_scene_to_packed(mainScene)


func _on_color_rect_gui_input(event: InputEvent) -> void:
if event.is_action_pressed("talk"):
if current_index < text_to_display.size():
if current_text_index == text_to_display[current_index].length() || current_text_index == 0:
%TextScenario.text = ""
%TextDelay.start()
current_text_index = 0
current_index += 1
%Next.visible = false
else:
%TextScenario.text = text_to_display[current_index]
current_text_index = 0
%TextDelay.stop()
%Next.visible = true

func load_text_file(file_path: String) -> PackedStringArray:
var txt = FileAccess.open(file_path, FileAccess.READ)
var txt_packed = PackedStringArray()
while txt.get_position() < txt.get_length():
txt_packed.append(txt.get_line().replace("。", "\n"))
txt.close()
return txt_packed

スクリプトはコメントがなくてわかりにくいかと思いますが、そこまで難しいことはないです。
まずはload_text_fileというファンクションがありますが、テキストファイルで文字の内容を管理したかったのでテキストファイルを読み込めるようにしています。それをStringのArrayに用意します。@export var path = "" にしているのでは使い回せるようにしています。あとはTimerを使ってテキストファイルから読み込んだものを表示しています。

次は会話シーンのダイアログを作っていきます!

引き続きギルガメをよろしくお願いします。
© Copyright 2024 YOSAPPS. Powered with by YOSAPPS