3Dウィジェットをカメラに向ける
「3Dウィジェットは3D空間にあるから、向きによっては見えないこともある。平面ポリゴンにウィジェットを貼り付けたような感じ。違う角度からも見えるようにしたいので、今日はウィジェットを自動的に回転させる仕組みを作る」
「FindLookAtRotationを使うと、あるアクターから別のアクターへの正しい向きを簡単に調べることができる。元々のアクターの正面がずれてたら駄目だけど。Xのプラス方向を正面とした場合の計算になるはず。あとはNPCとかの向きが変わっても大丈夫なように、計算に使う座標や角度はワールド座標基準で」
「すると、こういう風に横や後ろに回っても吹き出しが見えるようになる」
妹「ちょっと傾いてるね」
「ビルボードの仕組みではないからね。きっちりカメラを向いちゃうから、横にあるウィジェットは横向きになる」
妹「Z軸以外を回転させてないのは?」
「FindLookAtRotationの値をそのまま使うと、上下の問題が出て来るというか、吹き出しがこっち側にお辞儀する感じになる。そのほうが見やすいかもしれないし、好みの問題だけど」
Widgetコンポーネントでウィジェットが表示されなくなる問題と解決法
「Widgetコンポーネントのパラメータを調整していたら、なぜかウィジェットが見えなくなって、しかも元に戻せなくなるというトラブルが発生した。DrawAtDesiredSizeという項目にチェックを入れると、なんかウィジェットが消えちゃう」
妹「チェックを外せばいいのでは?」
「ところが外しても元には戻らない。一度押しちゃうともう駄目。UE4を再起動してプロジェクトを開き直してもそのまま」
「消えた方については、ウィジェットの構造の問題もあるみたい。元々全画面表示用だし、拡大縮小用に色んなウィジェットを重ねてたから。シンプルにボタンとテキストだけのを作ると、DrawAtDesiredSizeにしても消えない。本来の趣旨通りというか、ウィジェットを余白部分を無視した感じで表示される。でも一度チェックしたら元に戻せないというのは同じ」
妹「そこチェックすると他のパラメータも連動して変わっちゃうのかなあ」
「そうかもしれないけど、ちょっとややこしい状態になってると思われる」
「DrawAtDesiredSizeをオフにしてからコンポーネントを複製すると、コピーしたやつはちゃんとウィジェットが表示される。要らない方を消せばとりあえず復旧できる」
妹「なぜ複製で……」
「DrawAtDesiredSizeをTrueにした時に、何かしらの隠しパラメータ的な物が変化してて、でもそれは複製されないパラメータになってるんだと思う。複製で戻せるとはいっても、ブループリントでGetしてたりする部分には影響がでてくるから、必要のない時は押さないに限る」
Widgetコンポーネントで、3D空間に文字を表示する
「メッセージウィンドウじゃなく、キャラクタに吹き出しを付けるみたいなやつを作ろうと思って色々試してみたところ、この3Dウィジェットという仕組みが良さそうだった」
「Widgetコンポーネントというのを付けるだけで、画面の一番手前とかじゃなく、アクターと同じ空間の中にウィジェットが出せる。」
妹「そういうの前にやろうとした時は、たしかTextRendererでやろうとしたんだけど、その時はたしか日本語がなんか変になった気がする」
「TextRendererは使う文字を全部事前にテクスチャにしておかないといけないらしい。ちょっと面倒だし、漢字とか全部使えるようにすると容量も大きい。ウィジェットをそのまま3D空間に持ち込む方が早い。コンポーネントも1つで済む」
「ウィジェットを表示する大きさを設定しておくと、その中に指定したウィジェットが表示される。ビルボードじゃないんで向きは自力であわせないといけない」
「あと本来はこのウィジェット、黒い半透明の部分があるんだけど、WidgetコンポーネントのBlendModeが、デフォルトだとMaskedになってるから半透明部分が見えない。半透明表示にするならTransparentに変更する」