雑記
Unity

【Unity】ここが辛いよUnityさんっていう個人的な思い


まえがき

Unityが一般的に流行りだして5~6年くらいですかね。

最初はおっかなびっくりしながら触っていましたけど

わぁなんて素敵なツールなんだろうとすぐに考えを改めた懐かしい思い出です。

Unityで作ったゲームをリリースしたこともあるけど

実はいうほどUnity使った開発はしたことない

だから浅い事を言っているかもしれないですが

ここが辛いよUnityさんっていう個人的な思いを適当に書きます。


君は誰に動かされてるんですか

プレイヤーだろうと敵だろうとだいたいは

沢山のゲームオブジェクトが集まっていると思います。

そしてあちこちにいろんなコンポーネントがくっついている。

まぁそれはいいとしよう

でもあちこでアップデートは動かないで

あちこちでアップデートされてると

一体こいつは誰に突き動かされいるんだぁあああ!!!

っていうコンポーネント捜索隊のお仕事が始まります。

なので個人的にはメインのスクリプト以外にはUpdateは書きたくない。


Updateの順番だって大事だよ

Execution Order?でしたっけ

コンポーネントのUpdate順を制御するやつ

ゲームではこの処理をしてから、この処理を動かしたいという事は往々にしてあるはず

しかしそういう動作順序なんかはプログラム外で制御したくないという気持ち。

Execution Orderでちまちま指定するのもめんどっちぃ

あとコンポーネント単位で順番を制御できてもあまり利点がないというか

わかりにくいというかこのオブジェクトを先に処理したいっていう感覚。


FixedUpdateでカオス

衝突検知でRigidBodyを使い始めると

FixedUpdate「ねぇねぇ、使ってよ」

やってきますねこいつが。

FixedUpdateとUpdateは必ず1:1でコールされるわけではなく

なんとも御しがたい機構だなと思います。

衝突検知はいいんだけどね、ポジションの制御が鬱。

もう自分で衝突処理書くよって言いたくなるけど

書き始めるとなんでUnity使ってるんだっけ?と自問自答が始まり手が止まる。


エディター依存の恐怖

エディターで簡単に値いじれて調整できてトライ&エラーが早い!

というわけでエディタでバランス調整したりしてたけど

プログラマーとしては精密機器を扱ってる部屋を一般公開したようで落ち着かない。

エディタに設定された値の整合性チェックとか総合チェックとかするなら

最後までエディターっで調整ってのは嫌で

デバッグとかモック作成の時だけの用途にしたい。

あとプレハブ事に調整したりとかで一括で見づらいというか

設定があちこちに散らばるイメージがある。

それようにエディタカスタマイズして作ればいいんだけどね。。


完成までのこり10%の10%が遅々として進まぬ

モック作成はめちゃはやいしやりやすい。

90%まで作るのはえらい楽です。

ただ製品版として100%にするのがなぜか前半の90%よりしんどい


そもそもコンポーネント思考って

もともとあったものにコンポーネントを追加するだけで、違う性質のものになる

っていうのは素敵だと思うけど、現実そう簡単にはいきませぬ。

要するに委譲だと思うんすよね。

1つのクラスに沢山処理書くと可読性悪くなるのでクラスを小分けにしましょう。

分けたクラスをメンバ変数で持ちましょう(isではなくhasだ!)

ってやってたのがGetComponentでとってくるようになっただけで

根本はそんな変わってない。

ただ独立して動けるUpdateを持ってしまっているところが恐ろしいのじゃ。

人はあれば使ってしまう生き物なのじゃ。。。


まとめ

まとまりもなくただただ駄文を書き連ねてしまいました。

たしかにUnityは便利なんだけど

リソースエディタとしてとか動作確認ツールとして優秀

でも開発環境としては御しきれないという印象。

俺のスキルの問題なんだろうなと思うけど。。。

どうやったらこのUnityを綺麗に制御できるんだろうっていう答えがなかなか出てこない。

色んなやり方があるにしても、どれもこれもうーんってなる。

やっぱゲームの根本はC/C++でごりごりに書けるほうがやりやすい。

欲を言えばC#で使えるような便利な機構が使えるC/C++が欲しい。

そう思うわけでした。