2016年4月29日金曜日

第五回UE4ぷちコン 「アイドルマネー 愛の錬金術師」で工夫したこと


カメラ制御

アイドル候補との戦いのとき
カメラは「正対したとき」「叩いた瞬間」「倒れたとき」と
三つの状態があります。

アイドルごとに大きさが違ったり倒れるモーションを変えたりしてるので
カメラはそれぞれ調整できるようにする必要があります。

そこで今回は、ChildActorコンポーネントとしてカメラアクターを三つ持たせることにしました。



それぞれのChildActorコンポーネントに識別タグをつけて
Set View Target with Blendでカメラを切り替えてます。
カメラコンポーネントを使ってないのは、Set View Target with Blendのためです。




サイリュームの動き

サイリュームはインスタンシングメッシュを使い
マテリアルのWorldOffsetで左右に振ってます。
モデルは適当に作った三角柱メッシュです。



マテリアルはこんな感じなのですが
今回あまり考えず、結構テキトーに作ったので、あんまり参考にならないかもしれないです。


PerInstanceRandomノードを使えば、インスタンスごとにランダムな値が取得できるので
ライトの色をひとつづつ変えたり、動きの周期に個体差をつけたりできます。
https://docs.unrealengine.com/latest/INT/Engine/Rendering/Materials/ExpressionReference/Constant/


モデルの首ふり

お札で顔を叩いたら顔が左右に揺れるようになってるのですが
これはモーションファイルは使わずに
アニメーションBPでTransfrom (Modify) Boneノードの
ローテーションに値を入れることで実現してます。



アイドルのマウスによる選択

マウスカーソルで選択したアイドル候補はリムライト的なものが付与されます。


これはPlayerController取得して、ConvertMouseLocationToWorldSpaceで
マウスの指している位置や方向を取得し、LineTraceForObjectノードで
当たっているアイドル候補モデルを取得します。

当たってるモデルが存在したら
SkeltalMeshのSetRenderCustomDepthでカスタムデプスを有効化します。




そして、ポストプロセスでカスタムデプスが有効になってる部分に対し
カメラベクトルと法線の内積をとって、それが90度になるほど色がつくようにしてます。

下のマテリアルがそれです。
上半分ぐらいがカスタムデプスに対する処理で、下半分はカーソルの表示処理を同時に行ってます。




高速移動の表現

操作キャラは瞬時に移動するのですが
高速移動している感を出すためにモデルを伸ばす処理と、集中線の表示をしてます。



モデルを伸ばす表現は、移動している方向ベクトルをマテリアルにパラメータとして渡し
それと法線の内積をとり、進行方向と逆になるほどWorld Offset Positionに
後ろ方向ベクトルを入れてます。


集中線はポストプロセスです。
だいたいこんな感じになってますが、ポストプロセスでやる意味は
正直あんまりないので詳しい説明は省きます。

自分は素材を作るのはめんどくさいと感じるのですが
シェーダーやマテリアルいじるのは大丈夫なので、無理やりこういうので実現しがちです。




お金

ビンタするごとにお金が空中に舞いちるのですが
これもマテリアルのWorld Position Offsetに値を入れて
ヒラヒラと見えるようにしています。

UI

UE4のUMGっぽくない感じになるように3Dっぽく傾けたり
マテリアルを工夫してアニメーションさせたりしていますが
ちょっと自分のセンスの無さが出ててつらい部分ですね。

4.11から、UserInterfaceのマテリアルにScreen Positionが追加されてるので
3Dぽくすること以外にも何か面白いUIの表示ができるかもしれません。






0 件のコメント:

コメントを投稿