ネームエントリー

書くネタが無くなって更新頻度もだいぶ減ってしまいましたが、今作っているRPGでネームエントリーの処理を作ってみたので記事にしてみます。

ざっくりどんな流れの処理かは こちら を見てみてください。

やっていることは

キャラクターのアクターにオーバーラップしてイベントを開始
文字送りをしていき、仕込んでいたスクリプトからネームエントリーを起動
カーソルを表示し、文字(ネーム)入力
チェックボックスをクリックするとネームエントリーをフェードアウト
カーソルを消してイベントを続行

とこんな感じで動いています。

まずネームエントリー部分について
ネームエントリーはWidgetで作っています。
テキストボックスとチェックボックスを
こんな感じに作って、これらの詳細よりOnTextCommittedやOnCheckStateChangedをにビューにしておき
テキストボックスの方の詳細/イベントOnTextCommitted
Widgetのイベントグラフで出てきた2つのノードに
こんな感じに
・テキストボックスの方には入力されたテキストを表示
・チェックボックスの方にはインスタンスに作っておいたMyNameという変数に入力されたテキストを代入するようにします。(CastInstanceは独自マクロです)

で、ネームエントリーが始まったらWidget上でマウスやキーボードが使えるようにするために
イベントConstrustノードにマウスカーソル表示インプットモードをこのUIのみに絞るノードを繋げます。
これでWidgetが表示されると同時にマウスカーソルが表示され、文字入力しても裏で動いているゲームが操作できちゃったりしないようにできます。

ネームエントリーが終わってチェックボックスを押されたら上に書いたOnCheckStateChangedのMyNameに代入した後ろに
こんな感じでマウスカーソルをオフにさせてインプットモードをゲームだけにするとカーソルが消えてゲームが再開できるようになります。

これ、ShowMouseCursorのオンオフだけだとオフった時に1クリックしないとゲーム操作に移らないんですよね。

で、下にあるノード群はWidgetをフェードアウトさせるアニメの再生イベントスクリプト再開の処理なんですが、これは私がイベントからネームエントリーを起動して終わったらイベントに戻るという処理をしたせいで、これがちょっとややこしくて…、必要ないかもですが一応解説しますと

まず【イベントをやってるアクター】【ネームエントリーのWidget】がお互い通じ合えるように、
Widget側の変数にEventActorと名付けたActorのObjectReferenceを作っておいて編集可能でスポーン時に公開にチェックを入れておきます。

次にイベントをやってるアクター側でネームエントリーを起動するスクリプトが呼ばれたらネームエントリーのWidgetが起動するようにして
こんな感じにEventActorにSelfをつなげておきます。

こうすればWidget側からキャストしてアクターの処理を動かすことができるので、
上の画像のようにキャストしてReadIndexを+1して次のスクリプトを実行、みたいなことができます。(これは私がイベント用のアクターのスクリプトに仕込んだ命令なので独自な処理ですが)

マウスカーソル表示まわりはShowMouseCursorだけだとゲームに戻るには1クリック必要だったりとちょっと予想外な反応になりますよね。
参考になりましたでしょうか?

コメント

このブログの人気の投稿

フィールド⇔バトルについて

Level Streaming完全に理解した(わかってない)

最低限のサウンド再生について