(cache) UE4で一本出してみて困ったこと

UE4で一本出してみて困ったこと (えーでるわいす なる)

こういうゲームつくった


 
ゲームのHPはこちら。
 
UE4でリリースまで一本やってみて、ここどうにかならんかなーと思ったとこなど書いてみます。
なお、使用バージョンは4.2~4.4です。 既に解決されてたり、こちらの勘違いもあるかもしれません。

ブループリント

BP全体

・変数や関数、コラプト名の小文字、大文字の変更が効かない
  一度打ち込んでしまうと、確定しなくても小文字、大文字は変更できなくなる。
  例えば、"amema" と一度打つと、消して "Amema" と打ち直しても確定すると "amema" に変わる。
 
・クラス内のメンバ変数は並びを入れ替えできるが、メンバ関数はできない(作った順になる)
  せめてアルファベット順で並べたりしてくれれば、set や get などが並ぶのですっきりするんですが。
 
・構造体のメンバの並べ替えができない(作った順になる)
  後からの変更や追加に弱い (メンバ追加したら構造体アクセスしてるノードが外されてたりする。
  あとメンバ追加するとよくプロジェクト自体が壊れる) ので、何のための構造体かよくわからん。
 
・同じクラス内だと全ての関数でローカル変数名の重複ができない
  つらい。
 
・ローカル変数に初期値が設定できない
  したい。
 
・コラプトだとローカル変数が使えず、関数だとタイムラインが使えない
  これは仕方ない気もする。
 
・処理優先度を指定したい
  並列なのかなんなのか分からないですが、4.2から4.3に上げた時に
  キャラクターBPとアニメーションBPの処理順が逆転したことがあった。
  処理順は決まってないと困る箇所がいくらかあるので優先度を指定したい。
 

継承

・途中でクラスの継承を変えようと思った時にしんどい
  あるクラスを、基底とその下の2つに分けようとした時とか。
 
・仮想関数がない
  カスタムイベントで代用できるけど、かなり面倒なことになったケースがあった気がする。
 

データテーブル

・CSVのデータテーブルが、C++で定義しないと使えない
  C++介さなくてもできないもんでしょうか?
 
・テーブルが作れないので、パラメータ定義とかしようとすると大変なことになる
  ゲームの調整段階になるとしんどい。
 

デバッグ

・#ifdef DEBUG的なものがない
  デバッグ用、開発用の機能を作る時につらい。
  せめてパッケージングの Development, Shipping が判定できたりすると助かる。
 
・ブレークポイントで止めても変数の中身が表示されないものが多い
  これはよく分からない。 (選択されてるオブジェクトは正しいと思うんですが)
 

運用

・BP変更したら、呼び出してるBP全ても実際に変更されてしまう
  例えばC++であれば変更ソースだけの変更で済むわけですが、
  BPの場合は参照側も全て変更かかってしまうため、複数人で開発してればコンフリクト起こすし、
  ちょっとした変更でほぼ全てのBPがコミットされるのが大きくなってくるとつらい。
  設計が悪いとか言われそうですが。 じゃあどう作ればいいのかっていうとよく分からないし。
 

入力

機能

・XInputにしか対応してない
  残念ながらDirectInputのパッドは多いため、対応するべきかなと思います。
 
・キーコンフィグの概念が無い
  UE4だと例えばAttackとかJumpとかボタンは開発者が設定するので、
  その判定自体がエディットされた状態で届くならそれで開発側としては問題なさそう。
  (副次的に発生する問題はありそうですが)
  
  あとはユーザー向けのエディットする機能もサポートが必要かと思われます。
  Unityは起動ランチャーに標準で用意されてますが、機能も分からなければ推奨位置も分からないので、
  無いよりマシではあるものの下策かなという感じ。
  
 
・デバッグ機能の任意割り当てがしたい
  具体的にはポーズとコマ送りをパッドに割り振りたい。
  デバッグ用なので、Shippingでは無効になる様にしたい。
 
・コマ送り時に押している入力をちゃんと反映させてほしい
  フレーム単位での調整やデバッグをする場合に必須。
 

BP

・任意タイミングで入力を判定できない
  「押した瞬間」と「離した瞬間」のイベントでの入力判定しかできませんが、
  これだと 「今押されているか」 と 「今離されているか」 が分かりません。 非常にまずい。
  最低限、任意タイミングでの「押している・押した瞬間・離した瞬間」の3つの取得が必要かと思います。
 
  欲を言うと、「任意時間押し続けている」(メニュー等で選択項目を動かす時とか)
  「押した瞬間から任意時間trueになる」(同時押し判定用) なんかもあると素敵。
 
・入力が取れないBPが多い
  メニューや、ゲームフローの入力待ち、デバッグ機能などで
  GameModeやレベルBPから入力を取りたいこともある。
 

モデル

・パーツの表示On, Offがしたい
  末端の飾りを付けたり消したりすることは現状でもやりようがありますが、
  例えばキャラクターの状態によって胴体部分だけ差し替えたいとかは無理なので、
  表示On, Off機能が欲しい。マテリアルだとかの描画単位で構わないので。
  (花咲か妖精UEではマテリアルのアルファで対応しました)
 

アニメーション

・1つのアニメーションアセットを複数のスケルトンに適用できない
  共通骨を持つスケルトンには同じアニメーションを流せないとちょっと困る。
  例えばダメージモーションなどが人間共通だったりする場合、
  キャラが増える度にアニメーションアセットをコピーしていくのかとか、
  元モーションが修正されたらコピーした分全部またコピーし直すのかとか。
  投げ技のやられ側モーションも全スケルトンにコピーしていくのかとか…。
 
・アニメーションBPの継承ができない
  例えば全キャラクター共通のアニメーション制御があった場合どう共通化すればいいのか分からない。
 
・ステートマシンの現在ステートをBP等外部から変更したい
  ダメージ遷移や空中制御(落下とか)、デモに入った時のリセットとか、
  自身ではない要素からのアニメーション遷移はあるのでできないと困る。
  花咲か妖精UEではダメージ遷移はAnim Graphでダメージ用のステートマシンを用意し
  通常のステートマシンを上書きしたが、これではダメージからの戻り先などが制御できないしやっぱり困る。
 
・ステートマシンからのイベント通知は即時やってほしい
  イベント通知が後で処理される様なので、正確な遷移に1フレームずつ要してしまう。
  A, B, Cの3つのステートがあったとして、
  イベント通知が即時であったなら A→B→C とCまで行くべきなのに
  B で1フレーム止まってしまったりするケースがある
 
・Anim Notify, Anim Notify Stateにパラメータが追加できない
  例えば Anim Notify State で攻撃判定を設定したが、通知にパラメータが仕込めないため
  これでは攻撃の種類の数だけ Anim Notify State を作らなければならない。
  IDが1つ設定できるだけでも非常に便利になります。
 
・アニメーションに仕込んだ通知等を、ループモーション時初回にしぼりたい
  例えばループ時に通知タイミングへ来る度にエフェクトやSEを鳴らしたくない。初回だけにしたい。みたいな。
 
・ペルソナの表示を任意fps(60fpsとか)ベースにできる様にしてほしい
  和製アクション(特に格ゲー)はやはりフレームベースな方が作りやすい。
  エンジン自体が秒ベースなのは変えようがない…ですよね。
 

エフェクト

・ジョイントにアタッチした時の方向やスケールの影響の仕方がよく分からない
  エフェクトの正面が何軸で、ジョイントの正面が何軸か…という辺りがもしかして決まってるのか
  どうでもいいのか分からなかったというか、うまく生成方向を制御しきれないので
  仕方なく全方位に出してごまかしたエフェクトがちょくちょくあった。

  花咲か妖精UEは右向き時スケール-1になってるのが原因な気がしますが、
  それがあるないに関わらず、スケールの影響無効オプションは欲しい。
 
・Vector Fieldをランダム回転させたい
  回転機能はあるのにランダム回転は無いので、パーティクルが全て同じ出方をしてしまって悲しい。
 
・ペルソナから区間発生させた場合、区間から外れた時全てパッと消えてしまう
  エフェクトの生成を止めるだけにもできる様にしてほしい。
 

UI

メニューなどサポートする仕組みが導入されるそうなので、あまり参考にならないかも。
 
・HUDクラスが同時に1つしか使えない
  複数使える様にしてほしい。
 
・HUDクラスで3Dオブジェクトが使えない
  とは思ったもののどうすればいいのか。
  コンポーネント登録したものがUIカメラに描画されるとか。
 
・メニューを作るのがあまりにもしんどい
  今後の新たな仕組みに期待。
 

サウンド

・BGMのイントロループ対応
  途切れないイントロループを実現するのが現状不可能。正直あり得ないレベルの問題なので本当にどうにかしてほしい。
  Wavのループ情報のインポートに対応してくれるだけでいい。
 

その他

・コマ送りで進む時間を指定したい
  現状可変フレームで最短時間が進みますが、進まなすぎて正直あんま意味ないので、
  60fpsベースで1フレーム進める(16.667msec)とかができる様にしてほしい。
 
・Exeの階層が深い
  Exeはルートに出してほしいなぁ…。
  
  (追記) ver.4.6で改善されたらしい
 
・多言語対応
  こちら側で日本語か英語かの変数作って、各テキストをBPから変更して対応した。
  できればロケールなりユーザー設定値なりで切り替えられる様になっててほしいので、
  UE4のシステム側に言語設定値を用意してほしい。