ゲームの可能性の限界を押し上げる取り組みを進めています。私達は日々、複雑なグラフィックス、パフォーマンス、デザインの問題に対する、革新的な優れたソリューションを目にしています。同じ問題が同じソリューションで繰り返し解決されている状況も目の当たりにしています。顧客の皆様と連携して取り組む中で、最も頻繁に発生している問題のいくつかについてご紹介していきます。共に取り組んだ様々なチームが多大な労力の末に獲得した知恵を、ここですべてのユーザーの皆様に共有できることを嬉しく思います。これらの問題の多くは、実際にゲーム機やスマートフォンでの作業を開始した後や、膨大な量のゲームコンテンツを扱う段階になってから初めて発覚するものです。ここでご紹介する教訓を開発の早期の段階から考慮しておくことで、制作の進行がよりスムーズになり、ゲームはさらに高みを目指せるはずです。組み込みになったことで、複数のシーンを使用してゲームプレイの特定のユニットや機能を定義するチームが増えて来ています。長年抱える「別のシーン内にあるオブジェクトを参照できない」という制約が、以前にも増して負担となる状況になりました。現在は、この制約は様々な方法で回避できるようになっています。多くのチームが、オブジェクトを直接参照する必要性を抑えるために、スポナーやプレハブ、プロシージャルコンテンツ、あるいはイベントシステムを多用しています。多く見られる回避方法は、ゲームオブジェクトに永続的なグローバル一意識別子(GUID)を与えるというものです。一意な識別子があれば、ゲームオブジェクトの既知のインスタンスを、それがどこに存在していても、(それが読み込まれていない場合や、セーブしたゲームデータを実際のランタイムのゲーム構造にマップする場合にも)参照できるようになります。非常に多くのクライアントが同じ問題を同じ方法で解決されていたので、参照の実装に踏み切りました。使用するアプローチを採ることにしました。社内で有益なテストケースになるというだけでなく、コードを皆様に直接シェアできるという利点があります。ビルドの提供をお待ちいただく必要はありません。コードをダウンロードしてすぐに使用を開始し、ご自身のニーズに合わせて変更を行っていただけます。こちらでソリューション全体をご確認いただけます。このソリューションの基本的な構造は非常に単純です。ある場合は、ディクショナリ内を検索します。このソリューションは多種多様なユーザーのプロジェクトに導入されることになるので、可能な限りシンプルにすることを目指しました。中で、どのようにしてゲームオブジェクトによるオーバーヘッドが一切生じない形で静的なマネージャーをセットアップしているか、ご確認していただけます。一部としてシリアライズできる形式にすることでした。追加されたので、これは比較的簡単に行えました。倍速く、外部のメモリは一切割り当てられないことが分かりました。適していると分かりました。後の使用に備えて修復できます。後の使用に備えて修復できます。適切に保存されるようになったのですが、残念なことに、これだけでは不十分でした。コリジョンを発生させます。一切作成されないようにするほうが明らかに効率的です。扱っているゲームオブジェクトの種類を特定して、適切に反応するようにする方法をいくつか提供しています。これにより、プレハブインスタンスであるかプレハブアセットであるかを特定できます。含むことはできません。インスタンス化された際に重複することになるからです。これにより、プレハブインスタンスであるかプレハブアセットであるかを特定できます。含むことはできません。インスタンス化された際に重複することになるからです。インスタンスデータを保存しない」という稀なエッジケースがあることが分かりました。関数の内部で以下の処理を行って、このエッジケースに対処しています。修正されたプレハブインスタンスのプロパティを強制保存します。修正されたプレハブインスタンスのプロパティを強制保存します。PrefabType.PrefabInstance){PrefabUtility.RecordPrefabInstancePropertyModifications(this);}#endifツールすべてが適切に保存されたところで、次に考えるべきは、ユーザーがこのシステム内にどのような方法でデータを取り込むかでした。作成は簡単でしたが、それらを参照するのは少し困難なことが分かりました。複数のシーンにわたる参照を設定するためには、ユーザーに両方のシーンを読み込んでもらうというのは非常に理に適っています。設定するだけで済みました。その参照は保存されないようにする必要がありました。エラーが出て、後に無効化されてしまうからです。保存する必要がありました。セットアップするのは簡単です。データをシリアライズするだけです。読み込まれていないシーンの中にターゲットのゲームオブジェクトがある場合はどうするのでしょうか。ユーザーに対して、値のセットがあることを通知し、そのオブジェクトに関するできる限り多くの情報を提供する必要があります。結果、以下のようなソリューションになりました。なっているのか、どちらであるか検知することができないからです。これには大きな利点があります。フィールドになっているので、実際のターゲットオブジェクトが必要な場合に読み込む必要のあるシーンが、以下のように強調表示されることです。フィールドを編集不可にしながらも実際のフィールドのような挙動を実装する方法は、以下の通りです。cachedGUIState;テストすべてが正しく機能するようになったところで、次に必要となったのは、正常な機能が確実に維持されるようにすることでした。社内で使用するためのテストを記述したことはありましたが、ユーザーコード用の記述経験はありませんでした。関しては知識が乏しかったのです。驚くほど便利なのです!上のような状態を作ることが目的です。テストの作成は比較的簡単に行うことができました。重複した時にそれを知らせるメッセージが出るようにするテストの全体です。コリジョンが発生しないようにした上で終了します。度だけ呼び出して生成しています。存在は保証されています。詳細はこちらのドキュメンテーションでご覧ください。このテストの記述は予想した以上に簡単でした。テスト記述の思考プロセスをなぞっただけでコード自体が各段に改善されたことにも驚かされました。皆様も、ご自身のチームで使用しているツールのテストをぜひ行ってみてください。なくアセットストアでの無料ダウンロードあるいはパッケージマネージャー経由で入手可能になる予定です。差し当たっては、改善の余地がある要素や問題に関して、ぜひフィードバックをお寄せください。ニュースを受信し始めるには、あなたのメールアカウントにお送りしたリンクをクリックしてください。おっと...何らかの支障がありました。一度やり直してください。PolicyCookies。