チュートリアルガイドGUI
ユーザーに行動を促すためのテキストボックスを作る。
ガイドマーカーが移動するのと同時に、メッセージを更新する。
新規CanvasLayer Scene
https://gyazo.com/d70baad6555bc86c67a22cadbc120d1f
ControlアイテムだけのシーンはCanvasLayerで作る
日本語フォントを入れないと行けないので、Google Noto Sans CJK JPを使おう
タッチ、クリックの透過
PopUpを全体に広げると、Doorなどタッチで起動するNodeを操作できなくなる。
それを回避するには
PopUpなどのラッパーControlのサイズを0にする
アンカーで位置だけ整える
Control.Mouse.Filter のプロパティを変える
Stop : 止まる
Pass : 通過する?(同じCanvasLayerのTree下のControlに行くだけ。Node2Dなどには届かない)
Ignore : タッチやクリックを無視(下にそのまま通す)
ボタンなどの入力要素がなければ、Ignoreにしておくのが安定そう
Jsonデータを用意
別に、GDScriptでもいいが。
汎用的フォーマットは、パースの手間がかかるがプログラマではない人との共同作業で便利。
json : 汎用的フォーマット。データをリモート化するのに便利
GoogleSpreadSheet : プログラマじゃなくても扱いやすい簡易データベース。
Excel : 同上
シナリオライターと協業するときは使うかも
Fileクラス
GDScriptのクラスの一つ
ドキュメントを見るとsaveとload使い方の例が載ってるのでコピペして使おう
.dat : データを示すファイル。テキストだったりバイナリだったり。特定のアプリケーションとは紐付かない拡張子
user:// : resとは違う、ユーザーごとに用意される領域。セーブデータに使える。
code: load_json.py
func load_json():
var file = File.new()
file.open("res://Text/TutorialMessages.json", File.READ)
var content = file.get_as_text()
file.close()
return parse_json(content)
code: TutorialMessages.json
{
"0":
"Heist Maister のチュートリアルへようこそ。
マーカーに向かって進んでください。
"1":
"よくできました。
次は、オブジェクトに鑑賞する練習です。
この先のドアをクリックして開けてください。
扉に十分近づくのを忘れないで。",
"2":
"暗闇の中で働きますので、闇夜を見通す必要があります。
あなたには、T.O.U.C.A.N 社製のナイトビジョンセットを支給しています。
ビジョンモードを切り替えるにはSPACEキーです。 では、次の場所へ向かってください。",
"3":
"機密情報は、その先のブリーフケースに入っています。
それを回収するのがあなたの仕事です。",
"4":
"機密情報を獲得しましたね?
出口はその先です。
脱出できればゲームクリアです。"
}
Script
code: Tutorial.py
var texts
func _ready():
texts = load_json()
update_pointer_position(0)
$TutorialGuide/Popup.show()
func update_pointer_position(index: int):
...
$TutorialGuide/Popup/GuideContainer/Label.text = textsstr(index) pointerをアップデートするたびに、GUIのLabelのメッセージも更新する
texts はJSON型 = Dict型 なので、indexを文字列に変換して要素にアクセス。
NightVision ModeではGUIを隠す
ちょっと実装がめんどいのでパス。
call_group()がうまく使えればいける