一週間でお題に沿ったゲームを作るというイベントに参加します。
わずか一週間でゲーム作るなんて、アイデア思いつくだけで大変なことでしたが
面白そうなアイデアを実現できるユニークでテクニカルなアセットよりも、
タイトル画面のアイコン・フォントとか、直感的に動いて音が出るUIとか、
シーンロードでフェードイン・アウトとか、そういう基礎的なもの・かゆいところに手が届くアセットが足りないことで時間を大きく削がれたのを実感しました。
今回使ったアセットは
PuppetMaster
今まで作り続けてきた3Dキャラコンのコアアセットです。
ラグドールにランダムきせかえに体型変更にまばたきに掴み投げと、魔改造を続けてます。
Dynamic Bone
ビルド設定をWebGLにしたら、なぜかプルプルする時があるんですが…
揺れものの定番ですが、布には弱いんじゃないかと思い始めてきた。
Dialogue System for Unity
フラグ管理つき会話システムとフキダシのUI集です。


トリガーやコライダーに当たったら作動して、吹き出しが出て会話イベントが始まります。
台詞と同時にカメラの移動やキャラの操作ロックができるようですが、やり方が分からずそのへんは自作スクリプトで代用しました。
昔はQTEのサンプルシーンがあったはずですが、なぜか今はない…?
Unique Projectiles Volume 1
いい飛び道具と着弾エフェクトが揃ってます。
HDRP・URPはともかくLWRPには対応してなくて使えないエフェクトが多いですが、
シェーダーを置き換えるなりして妥協すれば使えるものがそこそこあります。
Very Animation
モーションを自作するのに使いました。UnityのHumanoidボーン制御の仕様は特殊で、それを素直な移動と回転に置き換えて操作できます。
頭とRootに独自IKがあり、IKをベイクしたりキーフレームのクリーンナップできたり優秀です。
が、腰や脚を動かすとRootボーンまで謎の動きが追加されて、かかとがふらふら動きがちになりました。
脚の制御や姿勢のオフセット程度の差分モーションを作ろうとしてもフラフラするので困った。
IK使っても完全には止められずで、そもそもUnityのIKの仕様がBlenderやMMDと結構違うのかもしれない
FinakIKでも使わない限りふらふらは阻止できないのではという気がしてきた。
Magic Light Probes
自動でライトプローブをみっちり効率的に並べるアセットです。でもシーンのライトマップを正しく焼けてないからか、あまり効いてる気がしない…
広いステージマップをどうしたらきれいに焼けるのか
TeaTime
前回の記事で紹介したフリーのアセットです。コルーチンを1行だけのコードに置き換えて書けて、タイマー処理がめっちゃ楽になります。
ここからは自作のスクリプトを機能を紹介します。
つまり、上記のアセットを使っても足りなかった機能を自作で補いましたが・・・
SceneChangerSokuseki

手っ取り早くシーン遷移するためのコンポーネントです。
シングルトンだの汎用性を考慮してたら時間が溶けるのでシーンロードだけです。
シーン遷移中に他の遅延実行処理が重ならないよう、これにも遅延実行もつけました。
Hitkeysokuseki

特定のキーやボタンが押されたらイベントを実行します。
UIのボタンではパッドやキーボード操作に対応できないので作りました。
ボタン押しっぱで誤爆しないように遅延有効化・遅延実行つきです。
しかしシーン開始直後や押した直後にボタンを非表示にしたりと細かいことやってくと、OnStart()ではだめだったり=無効になったりとか思わぬ落とし穴があるのに気づきました
Fade
UIの画像のアルファをフェードしてフェードイン演出を作ります。UIのイメージにしか使えないです
UIボタンの前に置いてると当然ボタンが効かなくなりますが。
でもフェード中ボタンが出っぱなしになるのは防ぎたいとか、透明状態でもずっと表示しっぱなしなのやめたいとか贅沢いいだすと、複雑化しそう

HideObjectDelay
ポーズ機能の一種です。シーン上のUIボタンやイベント作動用オブジェクトなどをまとめて一時的に非アクティブにします。Teatimeの力で遅延実行・解除できます。
ゲームマネージャーを作ってなかったのでスタート時にイベント実行する機能もつけてる突貫ぶり。

PlayerActionLocker

トリガーやコライダーに触るとプレイヤーを一定時間特定場所にワープさせて、特定のモーションを取らせます。

その間操作禁止にするため、開始前と終了時にキャラコンなどのコンポーネントを登録して、一時停止させるメソッドをイベントに登録して作動させます。※一時停止できなかったら、そういうメソッドを自作して追加が必要です
AnimeParameterChanger
NPCを一定時間特定場所にワープさせて、特定のモーションを取らせます。前回の記事で紹介した通行人AIです。PlayerActionLockerはこれをベースに作りました。役割がかぶってるから同一コンポーネントでまかなうのが理想だけど、プレイヤーとNPCではやることがけっこう違うし不具合を対策する時間もなかったから…
ActLockHere
AnimeParameterChangerとPlayerActionLockerのためのマーカーです。通行人AIに位置やモーションの情報を送る他に、連続で作動しないように一定時間自身を無効化したりしてます。
…他の参加者の方々の作品を見て回ると、
まともにゲーム作るにはまだまだ色々足りてないと改めて実感しました。
ゲームマネージャー、各種コンフィグとシングルトン、チュートリアル、スコア計算、インターネットハイスコア集計、シェア機能…足らないものが多いです。
でも全て揃うまで待ってたらいつまでたっても完成しないので、荒削りでも世に出していかないとですね。待ってる間にもどんどんハードルは上がっていくのだ…
Comments