この記事はUnreal Engine 4 (UE4) その2 Advent Calendar 2018の1日目です
1日目ですので軽めの話題にしましょうね
今年10月に行われたボイスロイドゲームジャムにて作成した、Hyper Highspeed Kiritanで作った処理のうち、応用がききそうなやつをいくつか紹介しようかと思います
ゲームはこちら。
無料ですのでぜひ
なお年末に第2回が行われます
興味がある方はこちらもよろしくおねがいします
以上、宣伝終わり!!
本編に入ります
パイプ用プロシージャルマテリアル
パイプの模様(リング、ライン)は、プロシージャルなマテリアルを使用しています
HHKで要求した仕様としては以下の通りでした
- リング、ラインの数と幅は調節可能であること
- ゲームの進行に合わせて色を変化させられること
リング、ラインの幅調整部分は以下の通り。
くっきりした形状が欲しかったので、ValueStepを使用して2値化しています
TilingScale、LineScaleのParameterを調整することで数と幅を調節できるようにしています
色の変化はMaterialParameterCollectionを使用しました
これ一つでパイプ全体の色を変更できるので、DynamicMaterialInstanceを使用するより楽に処理ができます
パラメータのカーブ化
加速、減速時に使用する加速度パラメータは、直感的な調節が可能になるように、FloatCurveを使用しました。
カーブアセットを使用することで、
「低速状態から加速しやすくしたい」
「高速状態からの減速をしやすくしたい」
などの、感覚的な要求を満たしやすくなります。
0~1の範囲に収めるのは、Lerpと同じ感覚で使えるようにするためです。
この方法はわりとおすすめです
また、カーブアセットは「変化量」を扱うパラメータに対してであれば広く応用がききます
下図のCurveはコースの最大湾曲率を指定するカーブアセットです(横軸はセクション数)
ちょっとコースが難しいな、と思ったときはこのカーブアセットを修正するだけで難易度調整を行うことが出来ます
最適化関連
このゲームは一応最低限の最適化を施していますので、手持ちのAndroid端末に放り込んでも60FPSをキープすることが出来ています
(なお機種はGalaxyS9です。もうちょっと弱い端末でもたぶん大丈夫)
PCでも最低動作環境を満たしていない環境以外では正常に実行できています
(こちらはプロファイリング出来ていませんが…)
実行した最適化対応は以下のとおりです
- 可能な限りActorのTickを止める
- 事前生成するActor数を減らす
- 事前生成して保持するセクション数を調節可能にしておく
- SphereMaskを併用して、いきなり生成されたように見えないように工夫する
- 画面に映らなくなったActorを速やかにDestroyする
- 後ろに通り過ぎた後は再表示することはまずないので
本当に最低限ですが、これだけでも十分に効果は出ます(特にDrawCall)
非常に軽い内容でした。
明日は我らがボス、alweiさんの記事です