これまで、メッセージダイアログとキャラクターの配置を行ったので、次はこのキャラクターに対してAボタンを押したら会話ができるようにしていきたいと思います。
キャラクターと会話する仕組み
まず、簡単な仕組みを説明します。
Aボタンを押したタイミングで、キャラクターからレイというものを飛ばし、当たったアクターのイベントを実行します。
このレイを飛ばす処理は、ThirdPersonCharactorに記述し、会話ブループリントは設置したキャラクター側に記述します。
キャラクターに記述したイベントを実行する方法として、アクターにダメージを与える方法で行っていきます。
ThirdPersonCharactorからレイを飛ばす
まず、Aボタンを押した時のイベントを作成するので、「プロジェクトの設定」から、Aボタンの設定を行いましょう。
次に、ThirdPersonCharactorのブループリントを開きます。
以下のようにブループリントを作成していきます。
説明では、レイを使うと書きましたが、レイは一本線で当たり判定が狭くなってしまうので、BoxTreaceを使用します。
レイトレースでは、キャラから線が1本伸びるのですが、ボックストレースでは、立方体が伸びます。どちらも内容的には同じで、当たったActorを取得できます。(複数検知されず、これは最初に当たった1つのアクターのみが取得されます)
尚、説明上ではレイという言葉を使用していきます。
Capsule Componentから、一定距離だけレイを出します。距離は、Endに繋がっている ×300の部分になります。
ボックスのサイズは、Half Sizeの X30.0 Y30.0です。
一番右のApply Damageでダメージを与えます。
イベントはダメージを受けた側に書くのですが、0ダメージだとイベントが発生しないので、必ず0より大きくしてください。
キャラクターブループリントの作成
次にキャラクターのブループリントを作成していきます。
コンテンツブラウザで右クリックして、ブループリントクラスを追加します。
今回は、親クラスをCharacterを選びます。
左側のメニューから、Meshを選択し、右側のメニューのメッシュの項目から、Skeletal Meshを設定します。
以下のような感じでズレてるはずなので、位置を調整します。
また、下図の赤い矢印と重なってる水色の矢印が正面なので、向き90°動かします。
以下のようになればOKです。
次にイベントグラフを開きます。
以下のようにイベントを作成します。
このAnyDamageイベントは、ダメージを受けた時にイベントが発生します。
試しに、キャラに向かってAボタンを押して、メッセージが出たら成功です。
もし、メッセージが出ない場合は、キャラクターブループントのCan be Damagedにチェックが入っているか確認してください。
また、レイのサイズや距離も確認してみてください。
あとは、Print Stringの部分を会話のブループリントに差し替えます。
ついでに、SetActorRotationも設定しておきます。(話しかけた方に向きを変えます)
これで会話処理が作成できました。
まとめ
今回は、レイトレースを使用して、キャラクターと会話できるようにしました。
Tickでレイトレースすれば、会話できる人の方を向くとAで会話 とか表示を出したりできそうです。
次回は、キャラクターの上にキャラ名を表示できるようにしたいと思います。