UnityでStarter Assetsが公開されました
対応は2020.3.0 or higher でかなり高めです。
First Person版とThird Person版が用意されています。
これらはFPS micro gameや3D Game kitとやってることは似ているのですが、何が違うかというと、次期標準となるであろうInputSystemで作られています。
正直、InputSystemはちょっと前までプレビューだったこともあり「ホントにこれでいいのか」と思うところしきりでした。
何故なのかは触ってみた方はよくお分かりだと思います。InputSystemの特徴として
・複数の入力デバイスを統合的に扱うことができる
のはかなりうれしいのですが、
・イベントとして操作をとることができる
のにもかかわらず、
・オンとオフ、変化があったときにしかイベントがこない
→ 押しっぱなしなどの処理をいちいち変数で持って書かないといけない
ので、結局いままでと変わらずUpdate()に制御を書くことになり、イベントとしてとれるようになったのにコードがしない。
・初めにアクションマップのデフォルトデータと作りアタッチなりしないとウンともスンとも言わない。カスタマイズもわかりにくい。
→相対的に従来方法より初期学習コストがかかる
・やりかたや実装方法がいっぱいあり、結局どれを推奨してるのかわからない
というような状態でした。
そんなわけで今回公式ででてきたStarterAssetはどうなっているかというと、
・イベントとして入力をとりメンバ変数で保持。その値をUpdate()で使う
という、身もふたもない……というか、それでええんか……みたいな実装になってました。もっとシンプルな方法ないんか? と悩んだのはなんだったのか。
今後これが標準になって旧InputManagerが廃止されたとき困るのは初学者だろうと思います。
高度なことはともかくとして、「Updateにたった一行で書くだけでキー入力がとれる」からこそ「はじめの一歩」のハードルが低いのがInputManagerのよいところでした。
「多くの初期設定を要求し、メンバ変数などでデータの保持の概念などを知る必要がある」InputSystemはプログラムが分かっている人はともかくとしてハードルがかなり上がった印象です。
実際のとこUpdateサイクルで入力のイベントが呼ばれる(押しっぱなしでも)という設定があればUpdateに書かなくてすむ分、以前よりもコードはすっきりするし初学者にも優しいんじゃと思うんですけどね。。
UnrealEngine5の映像は何で1段上のクオリティに見えるのか
すでに触っている方も多いかと思います。しかしサンプルとして上がっているデータが100GB、メモリ32GB、VRAM8GBを要求して重量級。
とはいえUE5は単純に高い性能を要求するというだけではなく、むしろ「ハイパフォーマンス、ハイクオリティをお手軽に」みたいな思想だったりします。
その一つが「Nanite」でこれは要するに「遠くにあるもののポリゴン数を減らしていく」という、大昔からあるLODという技術の発展形で、Naniteがごっついのはモデルに適用するだけで動的に省ポリゴンしてくれる機能です。
(ヒストリアさんのとこでやりかたを紹介してますが、ほんと簡単です)
このため、
「全体で見えてるモデルの細かさがグンと上がってみえる」
また、現行のゲームでありがちだった、
「遠くにあるものがフェードでポップアップを(ほとんど)しない」
みたいなことが起きてます。
これがもうインパクト抜群。流行りのリアルなフォトグラメトリオブジェクトとも相まって
「ぱっと見でプリレンダどころか実写と変わらない」
絵がでてきています。
もう一つ、Lumenというライティング技術があります。
こちらはグローバルイルミネーションをリアルタイムで再現する技術なのですが、そもそもグローバルイルミネーションとは何かというと、ざっくりいえば光源が反射した光を再現するものです。これがあると一気に自然な光の表現となります。
ただ、今まではプリレンダでも膨大な計算時間がかかるもの。リアルタイムで行うのは難しく、それっぽく再現するにしてもかなり面倒なセットアップが必要だったりしました。
UE5ではLumenをオンにするだけで(というかデフォルトだとオン)特別な設定することもなく自然な光(反射光)が再現されます。こわい。
なによりすごいのは、これらの機能は今まで絵をキレイに見せるためにかかった多くの手間を一気に削減する可能性を秘めています。とくに「パフォーマンスと綺麗さのバランスをとる」というところの職人芸やチューニングの手間。
むろんターゲットとなるハードの要求もデケぇ……のですが、PS5、Xbox Series X世代のゲームはこうなるのか! が垣間見えるワクワク感がすごいです。
Unityのちょっとしたはまりどころ「コライダのOnTrigger、OnCollitionEnterはどちらかにrigidbodyが必要」
Unityでは当たり判定にコライダをつけてOnTrigger()やOnCollitionEnter()を使いますが、このとき、どちらか一方にrigidbodyがついていないと呼ばれません。
どちらか一方にというあたりが癖モノで、あまり意識せずに使っているとなぜ呼ばれないのか悩むことになります、
また、親オブジェクトのRigidBodyがついていた場合はOnCollitionEnter、OnTriggerは呼ばれます。これも「なぜこっちはイケるのにこっちはダメなんだ?」と混乱しがちな仕様です。
OnTrigger、OnCollitionEnterが反応しない、呼ばれないという時に頭の隅においておくとよいです。