原カバンは鞄のお店ではありません。

Unityを使ったゲーム制作のあれこれを綴っていきます。

【アセット紹介】インスペクタの補完ツール:Wingman

あと二週間

今年もあと2週間だと気づいて驚愕している日常が呆けた皆さんこんにちは。今年は異様に夏が長くて急に冬になったのでいつも以上に一年が短い気がします。今年はゲーム開発でもプライベートでも色々とイベントが多かった年でしたが気づけばアッという間に年末になってた。

 

オシャレさに全振りしたゲーム

現状(12/12現在)日本語未対応なんですが以前からその音ゲーらしからぬビジュアル面に注目していたので購入しました。

このゲームはADVゲームパートも含むストーリーモードと一般的な音ゲーを遊ぶアーケードモードがありますが、前述のように日本語未対応なので今回はアーケードモードだけのレビューとなります。
上のタイトル画面からも分かるようにJet Set Raido風のアートスタイルですが、音ゲーパートはMuse Dashのフォロワーといった感じで上下の2レーンをそれぞれ割り当てられたボタンで押し分けていくスタイル、音ゲーらしく長押しや連打もありますが上下の割り当てとは逆のボタンを押すノーツがあったり、左右両側からノーツが流れてくる場面があったりと、難易度調整や操作が単調にならない為の独自仕様が盛り込まれています。

Steamのレビューを見ると「非常に好評」の評価となっていますが、個人的にはお洒落さの為の演出やエフェクト、配色などに力を入れすぎて視認性や利便性が低いゲームに感じました。
ゲーム中で上下の割り当てボタンは特に表示されないので慣れないと混乱する、通常ノーツと長押しノーツの瞬時の見分けが難しいが長押しノーツは最初の入力を失敗すると途中から復帰不可、ポストエフェクトやカメラの揺れが大きすぎて人によっては酔うかもしれません。

また、メニュー画面やオプション画面も項目ごとにフレームで区分けされている訳でもないのに同系色で統一されているので、お洒落だけどごちゃごちゃして使い勝手が悪い印象でした。

ボタンの表示が極端に小さいのは何故?

今回はアーケードモードだけの感想で辛いレビューとなりましたが、日本語に対応された後のストーリーモードも含めると違う感想になるかもしれないので、その時に再度プレイして改めてレビューを書きたいと思います。

 

Wingman

インスペクタの補完ツールとしては「Odin Inspector and Serializer」が有名ですが、そちらは各コンポーネント個別の設定作業を補完するツールで使いこなすには各コンポーネントのスクリプトを変更する必要があります。
今回紹介するWingmanは多数のコンポーネントがアタッチされているケースでそのインスペクタの表示を整理し利便性を向上されるツールです。

アセットストアから購入してプロジェクトにインストールするとスクリプトの変更不要で全てのオブジェクトのインスペクタの上部にWingmanの機能が追加されます。
例えば通常の3Dモデルの場合、インスペクタを開くとTransform以外にもMeshFilterやMeshRenderer、場合によってはColliderやRigidbodyがアタッチされていてインスペクタの表示が長くなっていますが、それらはボタンとして纏められてインスペクタ上部に表示されます。

このインスペクタの場合

 

上部に各コンポーネントがボタンで表示されます。

 

Wingmanの機能

■コンポーネントの分離表示
インスペクタ上部に追加されたコンポーネントのボタンを選択すると表示するコンポーネントを制限することができます。ShiftキーやCtrlキーを使って複数選択することもできます。

編集したいコンポーネントだけを表示できるので作業ミスを減らし利便性が向上します。

■コピー&ペースト

表示するコンポーネントを制限した状態で、左上のコピーボタンを押すことでコンポーネントをまとめてコピーでき、別のGameObject上でペーストボタンを押すことでコピーしたコンポーネントをペーストできます。

 

■ドラッグ&ドロップ

コピー&ペーストのボタンを押さなくてもコンポーネントのボタンをドラッグし、別のGameObjectへドロップすることでもコンポーネントをコピーすることができます。
また、ヒエラルキー上の何もない箇所へドロップするとドラッグしたコンポーネントをアタッチした新しいGameObjectが作成されます。

 

最後に

Wingmanでは大量のコンポーネントを持つGameObjectを扱う際に、インスペクタ上での煩わしい作業を大幅に効率化できます。
ゲーム制作を進めていく使用するコンポーネントの数が徐々に増えていくので、こういったアセットは非常に手助けになります。
導入にソースの修正は不必要ですし、Odin Inspectorなどの別のインスペクタ系アセットとも競合しないので気になった方は購入を検討してみてください。

【アセット紹介】多機能なアニメーション制作用アセット:Timeflow Animation System

コミュ障

年末にインディゲームの勉強会が開催されることを知るもアジェンダに「参加者PRタイム」が含まれていることが分かり参加を断念したコミュ障な皆さんこんにちは。なるだけ人の前に立つ事を避けてきた人生なのでスピーチとかプレゼンテーションとか超苦手。

 

Timeflow

ゲーム制作の中でもカットシーンやイベントシーンの作成は結構骨の折れる作業ですが、その作業に手助けとなりそうなアセットが半額セール中だったので購入しました。

 

オブジェクトのほぼすべてのプロパティをタイムライン上で制御することでアニメーションを作ることが出来ます。Unity標準のTimelineではカメラの切り替えやAnimation,AudioClipの再生などは行えましたが、Transformなどを直接制御することはできませんでした。

Timeflowではそれらのコンポーネントのプロパティもタイムライン上で制御できるので、例えば音楽と同期したオブジェクトの移動やカメラの移動などが設定できるようになります。
またシーン内に3D ベジエ曲線を使用し、パスや地形上にオブジェクトを動的配置できたり、オブジェクト間でプロパティをリンクしたりと、Unity Timelineの拡張版といっても良いぐらい多くの機能を備えています。

上のようなデモシーンの場合、以下のようなタイムラインの設定により実行されています。

 

導入及びサンプルシーンについて

多機能なアセット故にそれを把握するためのドキュメントが大事になりますが、Web上に専用のページが設けられておりそちらを参照することになります。
メニューのToolからTimeflow>Documentationを選ぶとWebブラウザが開き導入用のページが開きます。

 

下の図はWebページを日本語に翻訳したものです

導入ページの中ではWebGL版でデモアプリを確認する事が出来ます。

 

また、サンプルシーンも膨大になるためか、アセットを購入して直ぐの状態ではサンプルシーンはプロジェクト内にダウンロードされていません。
サンプルシーンを導入する為には、Package Managerを開き「Packages - Axon Gensis」から「Timeflow Animation System Samples」を選び、Built-in/URP/HDRPなど環境に応じたサンプルシーンを導入してください。

 

少し触ってみた

Timeflowを導入するには最初にTimeflowのInspectorを開きます。メニューのWindowからTimeflow>Timeflow Inspectorを選択してTimeflowのTabを開きます。

TimeflowのTab内の「Add Timeflow to this scene」を押してシーン内にTimeflowのオブジェクトを生成します。

するとTimeflowのTabがタイムラインを設定するウィンドウに変わるのが分かります。

Timeflowオブジェクトには上のタイムラインを制御するための設定がInpector内に表示されています。

 

Timeflowでオブジェクトを制御するためには先程のTimeflowのタブに制御対象のオブジェクトをドラッグします。Timeflowのタイムライン上にオブジェクトが追加され、オブジェクト側にはTimeflowのコンポーネントが自動でアタッチされます。

 

次にオブジェクトの動作を設定します。例えばオブジェクト(Cube)が1秒後にY方向に1m移動し、Y軸に90度回転させる場合はオブジェクト(Cube)のInpector内でTimeに「1」を指定し、PositionとRotationにそれぞれの値を設定、その後、それらプロパティの横にあるオレンジのマークをクリックします。

上の図の赤丸の箇所

 

するとTimeflowのタイムライン上に設定が反映されるので、後はそれと同じ要領で時間ごとの位置や回転などを設定していきます。

各動作の変化量はカーブで指定する事が出来ます。ここら辺はUnity標準のAnimationを設定する時と同じ操作感になるでしょうか。

 

設定後はTimeflowタブの再生ボタンを押すと動作を確認することが出来ます。

 

中々高機能なアセットですが、まだよくわからない点も多いため、色々と調査した後に詳しい使い方を記事にしたいと思います。

 

【レポート】CEDEC+KYUSHU 2025に出展しました

裏門

「正門は工事中で入れないので裏門に回ってください」と丁寧に地図まで渡されて案内されたのに周辺の幹線道路を二周ぐらいした挙句、裏門までの路地が狭すぎて終始ビビり散らかしながら駐車場を探した運転下手な皆さんこんにちは。福岡市香椎周辺の路地の狭さと複雑さを軽く見てました、一歩間違えるとUターンできないし。ちなみに帰りはその裏門が施錠されていたため他の出口(こっちが正式な裏門だったらしい)までの経路がわからず学内を少し彷徨いました。

 

CEDEC+KYUSHU 2025

という訳で今回はそんな福岡市東区の九州産業大学で開催されたCEDEC+KYUSHU 2025のインディーゲーム展示コーナーにリズムアクションゲーム「Under A Groove」を出展してきたので、そのレポートとなります。

cedec-kyushu.jp

CEDECはゲーム開発者向けカンファレンスイベントでゲーム業界関係者による登壇・講演が主なイベントとなっていますが、CEDEC+KYUSHUでは会場内にインディーゲームの展示コーナーが設けられており、来場者の方が各公演の合間などに展示作品を遊べるようになっています。

我がStab of Bee Projectは去年に引き続き二回目の出展で、展示した作品「Under A Groove」も二回連続の出展となりますが、展示内容としては3月に開催された東京インディゲームサミットに展示したステージのブラッシュアップ版を展示させて頂きました。
なお、どちらのバージョンもYuhei Komatsuさんの「君はレトロ」を楽曲として使用しています。

www.youtube.com

 

改修点

東京インディゲームサミット版ではステージ内で表示される映像(アニメーション)を優先して作ったため、プレイヤーがただ映像を眺めているだけの時間が長くなる、という結果になっていました。
また、最適化の甘さから所々で処理が遅延する場面が見られ、プレイヤーに快適な操作を提供することが出来ていませんでした。

その為、それら問題点を解決するべく

  • プレイヤーが操作を行う範囲を増やす
  • プレイヤーに爽快感やリズム感を感じてもらえる演出を増やす
  • 処理の最適化を行う

以上の三点を改修点して掲げブラッシュアップを行いました。

 

・プレイヤーが操作を行う範囲を増やす

前回は特に序盤のはノーツが表示される間隔が長く手持ち無沙汰感が強かったので、少し無理やりにでもプレイヤーが操作する回数を増やしました。
下の動画にある円形のウィンドウや星形の三連符の箇所などは本来映像の内容とはあまり関連がありませんが、プレイヤーの操作をお願いしている箇所です。

 

・プレイヤーに爽快感やリズム感を感じてもらえる演出を増やす

Under A Grooveでは白枠内にアイコンが重なるタイミングでボタンを押すというルールで、プレイヤーにはそのタイミングを計ってもらうために殆どのアイコン(ノーツ)は直線に沿って等速運動させていました。
しかし、そればかりだと無機質で機械的な操作感になってしまうので、一部のノーツには多少タイミングが計り辛くても楽曲のリズムを感じるような動作を採用しました。

星形のノーツが跳ねながら移動する

 

・処理の最適化を行う

内部ロジックの見直しも色々行いましたが一番大きな効果があったのはシーン中で使用しているRenderTextureの解像度を半分にした事でしょうか。下のシーンは東京インディゲームサミット版で一番遅延が発生した場面ですが、今回のバージョンでは遅延はほとんど見られず快適に遊んでいただく事ができました。

 

成果は上々

色々不安があったのですが当日実際に試遊された方の様子を見ると手持ち無沙汰で飽きてしまうといった姿は見られず、遊んでいる方もその様子を見ている方からも「楽しい」「(映像が)可愛い」といった感想を聞くことが出来たので、色々と改良した成果が見られて良かったと自負しています。

また色々な方から試遊の感想と共にSteamページやSNSでの情報の有無を聞かれ、特に伝えらえるような情報が無いためその場限りの交流となってしまったのですが、気に掛けてもらえたようで嬉しかったです。今後の励みになりました。
改めまして、試遊いただいた皆さん、本当にありがとうございました。

当日の展示ブース(やっぱり前回と場所が同じだった)

 

会場の様子

前回もそうでしたが、CEDECに来場される方の殆どは各講演の聴講が目的のため、インディーゲームの展示コーナーは閑散と盛況の差が非常に激しい会場となっていました。

展示会場の様子(閑散期)

 

それでも最終的には50~60人ぐらいの方に試遊していただき、用意したクリアファイルも缶バッチも配布し終えたので出展した成果はあったと思いますが、もう少し寒暖差が緩やかになればなぁ、とも思います。(朝10時から開場しても11時過ぎないと人が来ないし、16時を過ぎると殆ど人は来なくなります)

またCEDECがゲーム業界の勉強会イベントという事もあってか、客層が他のインディーゲーム展示会と比較して大きく異なり、一般層や子供連れの家族層は皆無、就職先にゲーム系を希望していそうな学生かゲーム業界に従事している方々が大半で、昨今のインディゲーム展示会によく見かける動画配信者のような方も見かけることはありませんでした。

その中でも試遊に積極的なのは学生の方々で試遊台をワイワイ囲みながらアレコレ感想と分析を語り合っているのは他の展示会ではあまり見られない光景だったのではないでしょうか。

 

最後に

色々と書きましたがCEDEC+KYUSHUは出展が無料で且つ、出展者は各講演を自由に聴講する事が可能なので結構お得なイベントだと思います。(今回は都市伝説のパブリッシャーさんも講演していた)
また展示会の後には交流会(食事会)が設けられていたり、福岡から遠方に拠点を構えている方でも積極的に出展を考えても良いイベントではないでしょうか。
私もまた来年も出展することが出来たら幸いです。その時は正門の工事も終わっているでしょうし。

 

【Unity】Physical Cameraって何かね?

武勇伝

XなどのSNSでどこにも需要が無そうな「俺が若いころの武勇伝」を語っている投稿を見ると何故か悲しくなる感傷的な皆さんこんにちは。昔の苦労自慢とか飲み屋でやっとけばいいんですがリアルで聞いてくれる人が誰もいないんでしょうね。

 

CEDEC+KYUSHU 2025

以前からお知らせしていましたが、11月29日(土)に福岡・九州産業大学で開催されるCEDEC+KYUSHU 2025のインディゲーム展示コーナーに新作リズムゲーム「Under A Groove」を出展します。

cedec-kyushu.jp

CEDEC+KYUSHUはコンピューターゲーム開発者向けの技術カンファレンスで、ゲーム業界関係者による制作技術やマーケティング手法などの発表・講演が主な内容となっていますが、本家「CEDEC」とは異なり「CEDEC + KYUSHU」では会場の一部にインディーゲームの展示コーナーが設けられており、来場者の方が各公演の合間などに展示作品を遊べるようになっています。
個人的には地元福岡で開催されるという事もあり、去年もインディゲームコーナーに出展させて頂いたので二年連続の参加となります。

www.karvan1230.com

インディゲーム展示コーナーには18作品ほど展示される予定ですが、やはり去年と同様に福岡近辺で活動している開発者・サークルの作品が多く、東京や大阪のイベントではあまりお見掛けしないようなタイトルも見かけるので、どのような感じになるのか今からワクワクしています。当日会場に来られる方はよろしくお願いいたします。

ちなみに私のブースの場所は展示会場の奥「4」番です(去年と同じ場所?)

 

Physical Camera

UnityではCameraコンポーネントの視野角の設定は該当するプロパティ(=> Field of View)を変更して行いますが、デジカメなどの現実のカメラではイメージセンサのサイズやレンズの焦点距離によって決まるものらしく、それら現実のカメラに沿ったパラメータを設定して視野角を設定することもできるようになっています。

CameraコンポーネントのPhysical CameraのチェックボックスをONにするとイメージセンサのサイズや焦点距離などを設定できるようになります。

 

Focal LengthとSensor Sizeはそのまま焦点距離とセンササイズを意味しているので、この値を変更すると視野角(Field of View)の項目が変わります。

試しにSensor Sizeを変えてみるとそれに連動してFiled of Viewの値が変わります。

当然ながら視野角の変更はGame画面に反映されます。

 

Sensor Sizeを固定してFocal Lengthを変更しても同様に視野角が変わります。

Focal Length=25の場合

 

Focal Length=100の場合

 

Lens Shift

Physical Cameraの項目の中に「Lens Shift」という項目があります。
これは現実のカメラでは「シフトレンズ」と呼ばれる機能と同等の機能で、被写体の平行垂直を保った状態で撮影する範囲を変えることができる機能です。

例えば下の図のような並んだビル群を撮影しているカメラに対して

単純にカメラを横に移動させると当然ながら中央のビルに対して少しは側面から撮影した映像となります。

これをLens Shiftの設定でX座標の値を変更すると

中央のビルは正面を向いたまま撮影範囲が横にずれた映像となります。

これはカメラの映像を投影行列によって横にずらすという手法が使われている為で横にずらす範囲はある程度に限られます。

しかし、例えばステータスウィンドウやミニマップを画面の端に表示し、それに伴ってゲーム画面を少しずらしたいケースなどでは対象を歪ませずに表示位置だけを調整できるので、結構有用な機能なのではないでしょうか。

【小技】特定のコンポーネントがアタッチされているオブジェクトを探す

ノートPC

社内で液晶モニターが支給されず小型ノートPCの小さいディスプレイでチマチマ作業している不遇な皆さんこんにちは。確かに週のうち2,3日はテレワーク勤務ですが液晶モニターぐらいはいつでも使えるように用意しておいてほしい。

 

分岐とロールプレイを楽しむゲーム

日本ではあまり話題に上ってませんが古参ゲームファンからは待ち望まれていた続編ゲームを購入しました。

SkyrimやFalloutを開発したObsidianの最新作で、Falloutの精神的続編にあたる「The Outer Worlds」の2作目になります。
人類が銀河系内の星々に移住し、 企業間戦争や新興宗教、帝国主義者の陰謀が蔓延するディストピアな世界を舞台に惑星を跨いだ壮大な冒険が楽しめます。
一応ジャンルとしてはSFアクションPRGとなっていますが、SkyrimやFallout同様に「アクション」面にはあまり期待せずに、遠い未来の遠い惑星の住人になりきって異世界の冒険を楽しむ「ロールプレイング」ゲームとなっています。

Obsidian作品らしく「特性」や「スキル」に「経歴」や「欠点」といた独自のパラメータが組み合わさる事でプレイに大きな幅がもたらされ、各プレイヤーがそれぞれの自由なビルドでストーリーを紡ぎ、攻略を楽しむことができます。
特に「欠点」という能力は「銃」や「近接武器」といった一般的な技能とは異なり「スキルポイントを多く獲得できるが最低値のスキルのみしかポイントを振れない」「経験値を多く獲得できるが会話の選択肢が勝手に自動選択される」といったメリットとデメリットどちらも存在する特殊な技能で、それらはゲーム内の行動に応じて提示され獲得を選択する、という仕様で、これによりプレイヤー毎、周回毎にストーリー展開も攻略法も異なってくるという中々飽きさせない作りになっていると思います。

昨今ではオープンワールドといえど「アクション」を主体したゲームが主流となっており、本作のように「ロールプレイ」を基調としたゲームは少し古臭く感じるかもしれませんが、NPCとの会話やクエストの攻略に膨大な選択肢が用意され、展開の分岐を選ぶ面白さは流石Obsidianといったところ、多くの方がこの面白さを強く感じ取られるゲームだと思います。

 

コンポーネントを探したい

ゲーム制作が長くなると、それに応じて作成したコンポーネントの数も多くなっていき、振り返るとどのコンポーネントがどのオブジェクトにアタッチされているのか分からなくなっていたりします。
そうすると特定のコンポーネントを改修する際、どこまで影響が及ぶかの調査が困難になり最悪デグレードの原因になったりします。

そんな時はHierarchyの検索機能で特定のコンポーネントがアタッチされているオブジェクトを探す事ができます。

Hierarchyビューの上部にある検索窓の虫眼鏡をクリックして、Typeを選択し検索するコンポーネントのクラス名を入力します。

するとHierarchy内は入力した検索条件に合致するアセットが表示されます。

ただしこの検索は「完全一致」として行われるので一文字でも間違えると検索されないことに注意してください。

 

特定のアセットを参照しているオブジェクトを探す

プロジェクト内のスクリプトや画像に対して参照しているオブジェクトを探す場合はProjectタブ内で該当のアセットを右クリックし、メニューから「Find References In Scene」をクリックします。

するとHierarchyビューの方にフィルタがかかり、該当のアセットを参照しているオブジェクトが表示されるようになります。

 

【Unity】シーンテンプレートを使ってシーンの雛形を作る

 

製造中止

気に入って頻繁に購入していたお菓子ほど、直ぐに製造中止になるマイナー属性持ちな皆さんこんにちは。ここ数年タブレット菓子(ラムネ菓子)が好きで好みの味の物をいくつか購入していたのですが、それらが一気に製造中止の憂き目にあってしまい、近頃は欲しいものが無くて困っています。そういえばレモン&ライチ味のハイチュウも好きだったののに製造中止になってた。復活しないかな。

 

正当に進化したゲーム

人気作の続編ながら発売前は主人公キャラクターを演じた俳優の政治的言動だったり、ポリコレや日本蔑視が懸念されていましたがそれらは全て杞憂だったと思います。

前作から主人公が男性から女性に代わり、舞台も歴史的な出来事(元寇)をベースにした対馬から全く架空物となる北海道(羊蹄山)に変わりましたが、ゲーム内容としては前作の良かった面を壊さずに新しい要素を加えて面白さが増した正当に進化したゲームでした。
前作のチャンバラ映画を再現したような戦闘はそのままに、前作では敵の武器種によって剣法の「型」を切り替える操作から「武器」を切り替える操作に変えたことで、武器に応じた派手な戦闘モーションでバッサバッサ切り捨てていく感覚を味わうことができるようになっています。

ストーリーは「対馬」というと土地を奪還することを目標とした前作から「羊蹄六人衆」という両親の仇を倒すという復讐を目的としたことで、「誉れ」や「武士としての矜持」といった崇高な理念と現実との葛藤ではなく、個人的な「怨念」と「赦し」が主題として語られる形となり、人によっては軽薄に感じるかもしれませんが、個人的には主人公の心境の変化を前作とは真逆の構成にしたストーリー展開は興味深く、海外産のゲームでありながら日本のifの歴史物に挑戦した姿勢は称えられるものだと思います。
ボリューム的に少し物足りなく感じる部分もありますが(っていうか序盤に訪れる鬼の章が濃すぎる)、北海道の美しい景色とチャンバラアクションを楽しめる、秋の夜長を過ごすにはぴったりなゲームではないでしょうか。

 

シーンテンプレート

アクションゲームやリズムゲームなどステージ制のゲームを作る場合、ステージ毎に同じような構成のシーンを改めて作成しがちになります。
使用するマネージャー系のクラスやカメラ制御系のクラス、ポストエフェクト等は同じなのにギミックの動作やキャラクターの制御が異なるために似たようなシーンを使い回して新しいシーンを作成したりします。

Unityではこうした作成手順を踏むプロジェクトの為にシーンテンプレートと呼ばれる機能を搭載しており、シーンの雛型となるテンプレートを登録しておくことが出来ます。

docs.unity3d.comシーンテンプレートを登録しておくとシーンを新規作成する際に、あらかじめ決めたコンポーネント等を設定した形で新規作成できるようになり、作業の効率化につながります。

 

作り方

シーンテンプレートを作成するのは簡単で、テンプレート化したいシーンを開いた状態でFile > Save As Scene Templateを選択するだけです。


作成したテンプレートはアセットとして保存され、Inspector上でテンプレートのタイトルや説明文、サムネイルといった情報が設定できます。

テンプレートとしたシーンで使用しているアセット(画像ファイルや音声ファイル、設定データ等)はシーン毎に個別のアセットして保持するかを選択することが出来ます。
テンプレートのInspectorのDependenciesという項目でチェックをつけたアセットはシーンと同階層に作られるフォルダの中に対象のアセットの複製が作成され、その複製を参照、使用するようになります。
例えばポストエフェクトのプロファイルなどシーン毎に設定を変えるアセットは、このチェックをONにしておき、シーンを作成する毎に設定を行います。

逆にチェックを外した場合は元のシーンと同じアセットが参照され、シーンと同階層に作られるフォルダの中に複製は作成されません。
AudioMixerを使った音量設定といったゲーム内で一様となるべき設定を行っているアセットに関してはこのチェックをOFFにしておく必要があります。また、無駄にプロジェクトの容量を増やさないためにもチェックをONにするものは厳選した方が良いでしょう。

 

シーンテンプレートを作成すると新規シーン作成ウィンドウ内に作為したテンプレートが選択できるようになっています。

 

最後に

テンプレートを変更したい場合は、テンプレート化したシーンを再度開き、修正後にSave As Scene Templateで保存します。
ゲーム制作において雛形となるシーンがあることは初期設定の煩わしさを軽減し、シーン作成作業の立ち上がりがスムーズになるメリットがあります。
ただし、使用するアセットによって、共通化するのかシーン毎に複製するのか、の使い分けをあらかじめ考慮する必要があることに注意してください。

【Unity】Assembly Definitionを利用してコンパイル時間を短縮する

花粉症(秋)

毎年恒例の花粉症の季節が始まり日常業務に支障をきたしているのにも関わらず周囲からはあまり理解されない不憫属性持ちの皆さんこんにちは。春と比べて秋の方は情報が少なく何も知らないまま急に症状が始まるので大変です。しかも最近はインフルエンザが流行していおり、公共の場で少しでもくしゃみをしようものなら周囲から一斉に非難の視線を浴びてしまうので本当に勘弁してほしい。

 

コンパイル時間

Unityでゲーム開発を行っていると、ゲームの規模が大きくなるにつれてコードを変更した後の待ち時間(コンパイル時間)が問題になってきます。
待ち時間中にはドメインリロード(staticフィールドのリセット等)も行われているため、ある程度の時間が掛かるのは仕方ないかもしれませんが、あまりに長くなると開発全体の効率に悪影響を及ぼすため出来れば短縮したいものです。

コンパイル時間を短縮するにはコードを最適化する、スクリプトの数を減らす等の対処が最初に取られますが、それでも尚コンパイルに時間が掛かる場合にはAssembly Definitionという機能を利用してコンパイルの範囲を限定し、該当するアセンブリ(dll)のみをコンパイルする=全体のコンパイル時間を短くする、という手法も有効です。

docs.unity3d.com

 

Assembly-CSharp

というのも、Unityでプロジェクト内にスクリプトを追加すると、そのスクリプトは全てAssembly-CSharp.dllへビルドされるようになります。
いわゆる「全部入り」のアセンブリが肥大化する形となり、その為、一部のコードを修正しただけでも「全部入り」のアセンブリがコンパイル・ビルドされるので、スクリプトの数が増えればその分だけコンパイル時間の増加につながります。

そこでUnityではAssembly Definitionを利用する事でAssembly-CSharp.dllのビルド範囲から分離してコンパイル先のアセンブリ(dll)を定義できるようになっています。

 

この機能はAssembly Definition Files(以後、adf)にビルド範囲と出力先アセンブリ等を指定する事で実現しますが、手順としてはこのadfを分割したいスクリプトが格納されたディレクトリ直下に作成するだけです。

Createメニューから「Assembly Definition」を選択する


adfを作成するとその下にあるディレクトのスクリプトも全てadf定義のアセンブリ(dll)へビルドされる事になります。

adfが存在するカレントとその下のスクリプトが分割対象となる


逆に言うと、adfを作成する前準備としてスクリプトを分割したいアセンブリ単位にディレクトリを作成して格納しておく必要があります。

 

参照設定

C#を使ったプロジェクトでは一般的な事ですが、アセンブリ(dll)を分割するという事は現状のスクリプトで分割したスクリプトの関数等を参照している部分がある場合は参照設定を設定し直す必要が出てきます。
Unityでは幸いながら「全部入り」のAssembly-CSharpへビルドされるスクリプトに関しては、adfによって分割されたアセンブリ側の定義で「Auto Referenced」という設定を有効にしておくと自動的に参照設定が行われる為、特に変更する必要はありません。

逆に分割する側のスクリプトに「全部入り」のAssembly-CSharpへビルドされるスクリプトの関数を参照してる箇所がある場合は参照不可でビルドエラーとなります。

 

そう言った場合は分割したアセンブリ同士は参照可能なので、参照先のスクリプトもadfを定義することで別のアセンブリとして、それをadfの参照定義に追加する作業を行います。

これはアセットストアで購入したアセットのスクリプトやPackageManagerからインストールした外部パッケージのスクリプトを参照しているときも同様です。
例えば分割したアセンブリのスクリプトがUniTaskを利用している場合は、adfのInspectorを開きAssembly Definition Referencesの項目にUniTaskのアセンブリを設定することになります。(これが結構面倒くさい)

赤枠内の設定がアセンブリの参照設定

 

分割されたアセンブリは全てAssembly-CSharp.dllと同じディレクトリにadfと同じファイル名でdllが作成されます。分割前と分割後ではAssembly-CSharp.dllのサイズに大きな差が出るのが分かると思います。

 

コンパイル時間を短縮するには

前述のように結構面倒な作業が必要となるアセンブリの分割ですが、実はただadfで分割しただけではコンパイル時間に大きな変化はありません。
なぜならアセンブリを分割しても「Auto Referenced」の設定により参照設定が行われていると、「全部入り」のAssembly-CSharpの方もコンパイル対象となるからです。

この為、「全部入り」のAssembly-CSharpから完全に参照されない形にすることを意識して、できるだけ「Auto Referenced」をOFFにできるようなアセンブリの分割を行うようにしましょう。(なかなか難しいけど)
まぁ、私の場合はデバッグ&動作確認用のテストスクリプトが多くて、それを分割するだけでもメリットがありましたが。

また、ソースコード内の依存関係をシステムとして導入することなるので、Assembly Definitionの導入以後の開発でコンパイル時間を短縮することを意識して開発できるようになります。
これはプロジェクトの規模が大きくなればなるほど恩恵は大きくなるため、一度導入を検討してみてはいかがでしょうか。

 

◇プライバシーポリシー

●個人情報の利用目的

当ブログでは、メールでのお問い合わせ、メールマガジンへの登録などの際に、名前(ハンドルネーム)、メールアドレス等の個人情報をご登録いただく場合がございます。

これらの個人情報は質問に対する回答や必要な情報を電子メールなどをでご連絡する場合に利用させていただくものであり、個人情報をご提供いただく際の目的以外では利用いたしません。

●個人情報の第三者への開示

当サイトでは、個人情報は適切に管理し、以下に該当する場合を除いて第三者に開示することはありません。

・本人のご了解がある場合
・法令等への協力のため、開示が必要となる場合

個人情報の開示、訂正、追加、削除、利用停止
ご本人からの個人データの開示、訂正、追加、削除、利用停止のご希望の場合には、ご本人であることを確認させていただいた上、速やかに対応させていただきます。

アクセス解析ツールについて

当サイトでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しています。

このGoogleアナリティクスはトラフィックデータの収集のためにCookieを使用しています。このトラフィックデータは匿名で収集されており、個人を特定するものではありません。
この機能はCookieを無効にすることで収集を拒否することが出来ますので、お使いのブラウザの設定をご確認ください。

●免責事項

当サイトからリンクやバナーなどによって他のサイトに移動された場合、移動先サイトで提供される情報、サービス等について一切の責任を負いません。

当サイトのコンテンツ・情報につきまして、可能な限り正確な情報を掲載するよう努めておりますが、誤情報が入り込んだり、情報が古くなっていることもございます。

当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。

●プライバシーポリシーの変更について

当サイトは、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直しその改善に努めます。

修正された最新のプライバシーポリシーは常に本ページにて開示されます。