unityでいってみよう!

unityがチョットワカル位の人のブログ

「TECH STREAM RELEASE Unity 2022.1」を日本語化化してみよう!

## あなたとともにイノベーションを創る

テックストリームのリリースでは、新機能や新ツールをいち早く試すことができ、お客様のフィードバックによってUnityの開発方針が決定されます。年に2回公開されるテックストリームは、次のリリースまでサポートされ、ディスカバリーやプロトタイピングの段階にあるプロジェクトで新機能の採用に備えることができます。

 

https://unity.com/sites/default/files/styles/16_9_l_scale_width/public/2022-05/Unity2022.1-TS-InnovationYourWay.jpg?itok=7EvMDOhm

 

## ハイライト

 

最新の機能とワークフローの強化をご覧ください。

 

### 生産性の向上

 

https://unity.com/sites/default/files/styles/810_scale_width/public/2022-04/visual-search-query-810x455%401x.jpg?itok=68wuwZCK

 

ワークフローを高速化するための改善により、Unity エディターで効率的に作成できます。チームの独立性をより重視することで、時間を節約し、イテレーションの速度を向上させます。プレイモードへの移行とファイルのインポートの高速化、必要なものを見つけるのに役立つビジュアルサーチクエリー、パッケージマネージャでの複数選択は、大きな違いを生む多くの改良点のほんの一部にすぎません。

2Dクリエイター向けには、ファウンデーション、インポート、アニメーション、物理演算の高速化に重点を置いています。スプライトアトラスv2、PSD拡張ファイルのサポート、2D PSD Importerのレイヤー管理、2D物理演算のためのドロネーテッセレーションが追加されました。スプライトスワップ機能では、キーフレームとアニメーションプレビューが効率化されました。

 

### 拡張可能なエディタ

 

https://unity.com/sites/default/files/styles/810_scale_width/public/2022-05/spline-export-810x455%401x.jpg?itok=DYSzTiBG

Editorをカスタマイズし、効率的なインエンジンワークフローをチームに提供します。UI Toolkitは、EditorとランタイムのUIを統合するソリューションになるための道を歩んでいます。2022.1 では、より多くの UI ウィジェット、マルチカラムをサポートした TreeView、ベクター描画 API、Property Drawers と Property Attributes により、ツール開発者のユーザビリティを加速させます。

Splineオーサリンフレームワークが利用可能になり、Editモードと連動するようになりました。プログラマは、ツールやカスタムコンポーネントを開発することで機能を拡張し、より多くのチームに力を与えることも可能です。

マテリアルAPIはすべてのマテリアルプロパティに拡張され、キーワードステート、HDRPの拡散プロファイル、IESライトに対応し、プロシージャルなマテリアル利用を強化します。また、Unity File System用の新しいAPIも追加され、これによりAsset Bundleの可視化と解析のためのツール作成が可能になりました。

 

### 拡張性のあるマテリアルワークフロー

 

 

https://unity.com/sites/default/files/styles/810_scale_width/public/2022-04/material-variant-810x455%401x.jpg?itok=RmPx3LYH

 

より高速なMaterialワークフローで生産性を向上させましょう。あらゆるレンダーパイプラインに対応するMaterialオーサリングを迅速かつ効率的に拡張できます。

Material Variantsは、大量のアセットを管理する際の反復サイクルを短縮し、コラボレーションを改善するための強力な統合ワークフローを提供します。Universal Render Pipeline(URP)とHigh Definition Render Pipeline(HDRP)の両方で利用できるこの新機能により、子マテリアルが親マテリアルと共通のプロパティを共有し、異なるプロパティのみを上書きできるマテリアル階層を作成することができます。

 

### パフォーマンスに関する詳細なインサイト

 

https://unity.com/sites/default/files/styles/810_scale_width/public/2022-05/frame-stats-810x455%401x.jpg?itok=hz6Yu-0l

プロジェクトをプロファイリングし、パフォーマンスを微調整して、より良いプレイヤー体験を実現しましょう。プロファイリングとパフォーマンスツールで、プロジェクトを次のレベルに引き上げましょう。

GPUとCPUのフレームタイミングデータとタイムスタンプをきめ細かく取得しアクセスするためのFrame Timing Managerを提供します。Frame Timing ManagerはEditorで使用でき、プラットフォームに関係なく、プロジェクトのパフォーマンスボトルネックをターゲットにして調整することができます。

また、スクリプト可能なすべてのレンダーパイプラインのエディタ内モードとプレイヤーモードの両方で、レンダリングデバッガにフレームスタッツプロファイラを追加しました。

 

### プラットフォームの最適化

 

https://unity.com/sites/default/files/styles/810_scale_width/public/2022-04/platform-optimization-810x455%401x.jpg?itok=_xSkdtlo

 

Unityプラットフォームのサポートにより、ゲームがどこでプレイされても安定性とパフォーマンスが保証されます。フレーム タイミング マネージャがエディタ内で使用できるようになり、ターゲット プラットフォームに関係なく、ゲームのパフォーマンス ボトルネックを特定して調整することが可能になりました。ARMのSystem Metrics Maliパッケージ経由で低レベルのデータにアクセスし、Androidゲームのパフォーマンスを分析できます。また、Samsungバイスのゲームでは、ビジュアルスクリプティングのサポートにより、Adaptive Performance 4.0を活用できるようになりました。

最新のインクリメンタル・プレーヤー・ビルド・プロセスにより、iOSおよびXboxゲーム開発のイテレーション時間を短縮します。レイトラッチングとモーションベクトルによりVRゲームのパフォーマンスを最大化し、Vulkanを使用するゲームのグラフィックパフォーマンスを改善します。

 

---

unity.com

 

UnityDataToolsのREADMEを日本語化してみよう!

概要

UnityDataToolsはUnity2022.1で追加されたUnityFileSystemApiで何が出来るのかを検証する為のプロジェクトで、GitHub上で公開されており、下記はREADME.mdを日本語化したものになります。

UnityDataTools

UnityDataToolは、UnityFileSystemApiネイティブダイナミックライブラリで何ができるかを紹介するコマンドラインツールのセットです。これらのツールの主な目的は、Unityデータファイルの内容を分析することです。コマンドラインツールUnityDataToolの使い方を理解することが目的であれば、ここに直接ジャンプすることができます。

UnityFileSystemApiライブラリは、UnityエディタのToolsフォルダで配布されています(バージョン2022.1.0a14から)。簡略化のため、このリポジトリにも含まれています。このライブラリは後方互換性があり、以前のどのバージョンのUnityでも生成されたデータファイルを読み込むことができます。

ネイティブライブラリ「UnityFileSystemApi」の目的は何ですか?

UnityFileSystemApiの目的は、WebExtractとbinary2textツールの機能を、より柔軟な方法で公開することです。その意味を十分に理解するために、まず、Unityがビルド内のデータファイルをどのように生成するのかについて説明します。ビルド内のシーンから参照されるデータは、プレイヤーデータと呼ばれます。これは、プラットフォーム固有のフォーマットでアセットを含むSerializedFilesと呼ばれるファイルのセットです。AssetBundlesやAddressableを使用する場合は、少し事情が異なります。AddressablesはAssetBundleであり、このドキュメントではAssetBundleという言葉しか使わないので、注意してください。

AssetBundleは、実行時にマウントすることができるアーカイブファイル(zipファイルに似ている)です。Player Dataと同じようにSerializedFileが含まれていますが、TypeTree1と呼ばれるものが含まれています。TypeTreeはオブジェクトがどのようにシリアライズされたかを示すデータ構造で、プロパティの名前、タイプ、サイズなどを表します。これは、以前のUnityのバージョンでビルドされたAssetBundleを読み込む際にUnityによって使用されます(そのため、プロジェクトを新しいバージョンのUnityにアップグレードした後、必ずしもすべてのAssetBundleを更新する必要はありません)。

TypeTreeを含むSerializedFileの内容は、UnityのToolsフォルダにあるbinary2textというツールを使って人間が読める形式に変換することができる。AssetBundlesの場合は、まずToolsフォルダにあるWebExtracツールでSerializedFileを展開する必要があります。Player Dataの場合は、残念ながらTypeTreeがないので、これらのツールは使えません2。binary2text が生成するテキストファイルは、ビルドの問題を診断するのに非常に有用ですが、通常は非常に大きく、ナビゲートするのが困難です。このため、AssetBundle Analyzerというツールが作成され、これらのファイルからSQLiteデータベースの形式で有用な情報を簡単に抽出できるようになりました。AssetBundle Analyzerはかなり成功しましたが、いくつかの問題点があります。プロジェクトのすべての AssetBundle に対して WebExtract と binary2text を実行し、非常に大きなテキスト ファイルをパースしなければならないため、非常に時間がかかります。また、binary2text が使用する構文は標準的ではなく、場合によっては解析が不可能なこともあるため、簡単に失敗することがあります。

前述の通り、UnityFileSystemApiはWebExtractとbinary2textの機能を公開するために作成されています。これにより、TypeTreeを用いたUnityのデータファイルを読み込むツールを作成することができる。これを使えば、任意のフォーマットでデータを出力できるbinary2textのようなツールや、より高速でシンプルな新しいAssetBundle Analyzerを簡単に作成することができるようになる。

リポジトリの内容

リポジトリには、以下の項目が含まれています。

  • UnityFileSystem: .NET クラスライブラリ、または UnityFileSystemApi ネイティブライブラリのソースコード
  • UnityFileSystem.Tests: UnityFileSystem ライブラリのテストスイート
  • UnityFileSystemTestData:テストデータを生成するために使用するUnityプロジェクト
  • UnityDataTool: Unityデータファイルの内容を解析するために使用できるいくつかの機能を提供するコマンドラインツールで、以下のライブラリを使用します。
  • Analyzer: a library exposing functions that can extract key information from Unity data files and dump it into a SQLite database (similar to the AssetBundle Analyzer).
  • TextDumper: SerializedFileを人間が読める形式にダンプする機能を持ったライブラリ(binary2textに似ている)。
  • ReferenceFinder: UnityDataAnalyzerで作成したデータベースを用いて、オブジェクトから他のオブジェクトへの参照連鎖を見つけることができる関数を提供するライブラリ

構築方法

このソリューションのプロジェクトは、.NET 5.0 SDKを必要とします。ビルドするには、お気に入りのIDEを使用することができます。これらはWindowsVisual StudioMacのRiderでテストされました。

また、このコマンドを使用してCLIからプロジェクトをビルドすることも可能です。

dotnet build -c Release

免責事項

このプロジェクトは「現状有姿」で提供され、Unityの公式サポート対象ではありません。UnityFileSystemApiを使って何ができるかの一例として提供される実験的なツールです。バグ報告やプルリクエストは可能ですが、対応される保証はありません。


脚注:
1: AssetBundlesはデフォルトでTypeTreeを含みますが、DisableWriteTypeTreeオプションで無効にすることが可能です。
2: Unityのカスタムビルドで、TypeTreeを含むプレイヤーデータファイルを生成することは可能でしょうか。

「Unity 2022.1 Tech Stream is now available」を日本語化してみよう!

新しいリリースサイクルであるTech Streamで最新機能を探求し、次のUnity LTSリリースに向けた第一歩を踏み出しましょう。

本日、新しい2022.1 Tech Streamリリースページよりダウンロードできるようになったことをお知らせします。Tech Stream のリリースは、初期の機能を実際に使っていただき、フィードバックを提供し、より使いやすいツールを作るための対話に参加していただく機会を提供するものです。テックストリームは年に2回リリースされ、2023年にLTSがリリースされたとき、すでにその機能を熟知し、新しいプロジェクトに取り入れる準備ができていることを保証します。
この新しいライフサイクルの最初のメジャーリリースは、Unityのエンジニアリングリソースをどこに投資すべきかについての、皆様のフィードバックとご提案によってもたらされました。ロードマップへの 7,600 件のメモ、フォーラムへの 5,000 件を超える製品に関する直接のフィードバックと洞察、そして何百もの個別の会話によって、70 以上の新機能を含む 280 以上の機能改善が行われました。そのすべてが、あなたによって形作られたものなのです。

この記事では、統一されたUI、アーティストのユーザビリティイテレーション速度、プラットフォームの強化など、主要なフォーカスエリアをカバーする最もインパクトのあるハイライトをいくつか紹介します。より詳細な情報は、公式のリリースノートをご覧ください。

拡張性のあるエディタ

あなたのチームのニーズはそれぞれ違います。私たちは、あなたのワークフローに合わせて拡張できるエディタを提供し、みんながより速く一緒に仕事ができるようにしたいと考えています。
UI Toolkitは、ランタイムUIのオーサリングとカスタムツールによるEditorの拡張の両方に対応する統合ソリューションです。2022.1では、UIウィジェットやカスタムシェイプでチームのためにEditorをカスタマイズしたいツール開発者のために、さらに多くの機能を追加しています。また、マルチカラムをサポートしたTreeView、UI要素の外観をカスタマイズするための新しいベクター描画APIを追加し、最もよく使われるものから順次、プロパティドロワーとプロパティアトリビュートを利用できるようにしました。フォーラムで私たちと繋がり、私たちはあなたのためにUI Toolkitをさらに良くするのに役立つ方法を教えてください。
スプラインの重要性については、フォーラムでもご意見をいただいており、公開されているロードマップの中でも最も要望の多い機能のひとつです。

スプラインツールについて調べているのですが、どのツールも私が必要とする機能を正確に提供してくれるかどうかわかりませんし、実験のために何本も購入するのはかなり高くつきます。ですから、良い組み込みスプラインツールは、私のプロジェクトにとって非常に重要なのです。
このリリースでは、新しい Spline オーサリンフレームワークがパッケージとして提供されています。これはスプラインをエンジン内で作成および操作するために設計されており、特にプログラマはジオメトリのインスタンス化やスプラインの移動などのツールやカスタムコンポーネントで機能を拡張することが可能です。また、新しい編集モードと共に動作し、標準の編集ツールやショートカットを使用してスプラインのポイントやタンジェントを編集することができます。フォーラムでご意見をお聞かせいただき、次のロードマップをご確認ください。
https://lh3.googleusercontent.com/9ZNglUEPltw-imtJFhhyY56BOC0k7AItQ31E22UehgSN89W_MLKB0scubrn_T6b2gP5exBOTQ6EktYCwQAOjyTvT3BGoTDKg3Mq13t0eEWq95P0bwDPqeKR7lZKIsG4rPEyeYvekM49-06UO2w
また、マテリアルのプロシージャルの作成も改善されました。コードを使用してマテリアルを生成するクリエイターのために、Material APIをすべてのマテリアルプロパティに拡張し、キーワードステート、HDRPの拡散プロファイル、IESライトをサポートし、Editorまたはランタイムでのプロシージャルマテリアルの使用を強化しました。
最後に、Unity File System の新しい API が追加され、Asset Bundle の視覚化および分析用のツールを作成して、チームのパフォーマンスを最適化できるようになりました。

生産性の向上

迅速なイテレーションは、あらゆるクリエイティブワークの重要な要素であり、ゲーム開発を楽しくするものです。Unity Editorのコアを最適化し、アセットのインポートからEditorでの作業、プレイ可能なゲームの構築とデプロイまで、作品のライフタイム全体を通して迅速にイテレーションできるようにしました。
同時に、グラフィックスフォーラムを通じて、テクニカルアーティストがビジョンをより迅速に実現するための追加のエディタツールやAPIを求めていることを知りました。そこで、このフィードバックに基づいて、あらゆるクリエイティブチームがより短時間でより多くの作業を行えるようにするための新しいオプションを追加しました。
HDRPとURPレンダラーの成熟に伴い、ビジュアルフィデリティの目標をより速いペースで達成するためのさらなる方法を求めているという話を聞いています。
https://blog-api.unity.com/sites/default/files/2022-05/MaterialVariantsNewLogo.png?imwidth=3840&
レンダリング&ビジュアルエフェクトのパブリックロードマップで最も投票された機能カードは、マテリアルバリアントでした。環境内の異なるプロジェクト、シーン、ロケーションでベースマテリアルを何度も再利用することがよくありますが、マテリアルが暗黙の階層のコンテキストから外れて変更された場合、オーサリングの問題につながることがあると聞いています。

ゲームのすべてのシェーダー/マテリアルをコントロールしたいのであれば、これは大きなプロジェクトにとって重要な機能です。これを何年も待っていたのです。
マテリアルバリアントは、アーティストが大量のアセットを管理するチーム内でマテリアルを再利用する際に、反復作業やオーサリングミスを減らすための統合された強力なワークフローを提供します。HDRPとURPの両方で利用できるようになったマテリアルバリアントでは、マテリアル階層を作成し、子マテリアルは親マテリアルと共通のプロパティを共有し、異なるプロパティのみをオーバーライドすることができます。テンプレートマテリアルの共通プロパティやオーバーライドされていないプロパティの変更は、自動的にバリアントマテリアルに反映されるので、時間を節約し、マテリアルの変更をより簡単に行うことができます。
https://lh3.googleusercontent.com/kax68NEiOojwsCBxVAq8gi9I4zALIQz6Rp_OsmeBSOIoCwpPgCBEVKp_k2z6Efvkim8G-RGoaiihZwp6WO8s57G613KY0vPmEpbnUT5wu4avw029D-AoqRv7C2bQ6Db44fp-j5708AaAuD4fQA
プロジェクトで適切なアイテムを探すのは、特に規模が大きくなるにつれて時間がかかるものだということを、皆さんは共有されています。そこで、ビジュアル検索クエリを導入し、探しているものをすばやく見つけられるようにしました。さらに、より複雑なクエリを作成したり、Editorオブジェクトピッカーを活用して、オブジェクトフィールドをより正確に選択することも可能です。
https://blog-api.unity.com/sites/default/files/2022-05/pasted%20image%200%20%281%29.png?imwidth=3840&
2Dクリエイターにとっては、生産性の向上が期待できます。今回のリリースでは、ファウンデーション、インポート、アニメーション、物理演算のスピードアップに焦点を当てました。
まず、スプライトアトラスv2がすべての新規プロジェクトのデフォルトとなり、アクセラレータとフォルダをパッカブルオブジェクトとしてサポートすることで、2Dクリエイターに好まれる生産性の向上を実現しました。Photoshop for 2D では、拡張子 PSD のファイルのインポートがサポートされ、作業性が向上しています。また、2D PSD Importerにレイヤー管理が追加され、取り込むレイヤーをより細かく制御できるようになりました。スプライトスワップ機能は、キーフレームとプレビューを合理化し、2Dアニメーションのためのスプライトスワップをより直感的に行えるようになりました。
https://blog-api.unity.com/sites/default/files/2022-05/layer%20management%20in%20psd%20importer%2022.1.png?imwidth=3840&
2D Physicsを支援するために、ドロネーテッセレーションを導入します。しばしば、ポリゴンが薄すぎたり、小さすぎたりして、物理エンジンによってフィルタリングされることがあります。ドロネーテッセレーションは、薄すぎたり小さすぎたりするポリゴンの生成を止めるだけでなく、同じ面積をカバーするために生成されるポリゴンの数を少なくします。詳しくは、サンプルロードマップをご覧ください。
また、プロジェクトに迅速に取り掛かれるよう、パッケージマネージャの改良も続けています。このリリースでは、複数のパッケージを一度に選択して一括管理する機能や、パッケージマネージャのキャッシュの場所を制御するオプションが追加されています。
ワークフローの別の部分の生産性をさらに高めるために、IL2CPP スクリプトバックエンドは、すべてのジェネリックメソッドの完全な共有バージョンを常に生成するようになりました。これにより、プログラマコンパイル時には存在しないジェネリック型の組み合わせを使用することができ、実行時にのみ発生する全てのクラスの検出困難なエラーを回避することができます。
エディターには非常に多くの改良点があり、ここですべてを紹介することはできませんが、いくつかのハイライトを紹介します。

  • プレイモードへの移行、テクスチャやスモールファイルのインポート、ビルドの作成の高速化(最大60%)
  • アンドゥ、リドゥ操作のUI改善
  • プロジェクトオープン進捗ウィンドウのキャンセルボタンを追加
  • ショートカットマネージャーの改善

詳細なパフォーマンスインサイト

私たちは、ゲームやプロジェクトのプロファイリングを行って、そのパフォーマンスに関する洞察を得ることが、お客様の成功に不可欠であることを理解しています。そこで2022では、私たちはプロファイリングツールとアナリティクスを強化し、お客様が行動できる包括的な情報を提供し続けました。
このリリースでは、GPU と CPU のフレームタイミングデータとタイムスタンプを粒度レベ ルでキャプチャしてアクセスするための Frame Timing Manager を提供します。Frame Timing ManagerはEditorで使用でき、プラットフォームに関係なく、個々のフレームのパフォーマンスに関するこれまで以上の情報を使って、プロジェクトのパフォーマンスボトルネックを特定し調整することができます。これらの機能を組み合わせることで、あらゆるプラットフォームでプロジェクトのプロファイリングとレポート作成を行うツールを構築することができます。パフォーマンス・チームと連絡を取り、フォーラムでさらに詳しい情報を入手してください。
https://blog-api.unity.com/sites/default/files/2022-05/image.png?imwidth=5000&
シーンを構築または修正する場合、またはコンテンツを改善または最適化する場合、フレームの予算がどのように費やされるかを理解することは重要です。レンダリング デバッガーにフレーム統計プロファイラーを追加しました。これは、スクリプト可能なすべてのレンダー パイプラインに対して、エディタ内 (再生モードのみ) またはビルドされたプレーヤーの両方で利用できます。このツールは、開発者のためだけでなく、シーンが CPU または GPU のどちらに依存しているかを特定し、フレームのタイミングの内訳を取得したいすべての人のためのものです。

プラットフォームの最適化

最後に、皆さんが毎日デプロイしているプラットフォームの幅広さについて説明します。多くのユーザーがUnityでの開発を選択する主な理由の1つであり、私たちが新機能と最新のAPIに対応したプラットフォームの最適化を続け、ユーザーの創造性を後押ししている理由でもあるのです。
Samsung のデバイスAndroid のパフォーマンスをさらに高めたい方は、Adaptive Performance 4.0 を活用できます。これによって、物理、デカール、カスタム、レイヤーカリングをカバーする4つのスケーラが追加され、その多くにサンプルが含まれます。大きな利点の1つは、Adaptive Performanceでのスクリプト作成をさらに簡素化するビジュアルスクリプトのサポートです。
https://blog-api.unity.com/sites/default/files/2022-05/image4.png?imwidth=3840& UnityのVisual ScriptingシステムのAdaptive Performance 4.0によりアクセス可能なユニット
Armチップセットを搭載したデバイスをターゲットとするAndroid gamesでは、さらに最適化を図りたいという声を耳にすることがあります。Unity 2022.1では、System Metrics Maliパッケージで低レベルのパフォーマンスデータにアクセスでき、変更内容がハードウェアレベルに与える影響についての洞察を提供するメトリクスを公開することができます。このパッケージに同梱されているRead GPU Metricサンプルをインストールして、GPUメトリクスがランタイムにどのようにアクセスされるかを見てみましょう。iOS プラットフォームでは、最新のインクリメンタル・ビルド・パイプラインを有効にして、前回のビルド以降に変更があったアプリケーションの部分のみを再構築するようにしました。
コンソール開発体験の継続的な改善には、全体的な安定性の向上と、Xbox用のインクリメンタル・ビルド・パイプラインのサポートの追加が含まれます。

Tech Streamについてもっと知りたい方はこちら

新機能の詳細については、リリースノートUnityマニュアルをご確認ください。Unity 2022.1は、Unity Hubからダウンロードすることができます。今後の展開が気になる方、機能のアイデアを共有したい方は、Unity Platform Roadmapのページをご覧ください。
各Tech Streamリリースは次のリリースまで毎週アップデートでサポートされますが、新機能の長期サポートは保証されません。実運用中のプロジェクトでは、より安定し、サポートが充実している Unity LTS リリースを使用することをお勧めします。新しいUnityのバージョンにアップグレードする前に、必ず作品のバックアップを取ることを忘れないでください。プロジェクトをUnity 2022.1に移行するためのアドバイスについては、アップグレードガイドを参照してください。

https://blog-api.unity.com/sites/default/files/2022-05/image2.jpg?imwidth=5000&

あなたに合ったユニティを作るために、ご協力ください

私たちはUnity 2022の旅を始めたばかりですが、私たちのエディターとツールがあなたの生産性を可能な限り高めることができるよう、コラボレーションを続けていくことに興奮しています。新リリースをダウンロードし、新機能を使用して、私たちが何を得て、次に何をすべきかを教えてください。

新リリースに関する一般的なフィードバックは、アナウンスメントフォーラムの投稿で共有できます。 レンダーパイプラインUIツールキットフレームタイミングマネージャなどの各分野の専用フォーラムグループでは、主要な機能に関する特定の洞察を常に歓迎します - これらのグループの全リストはこちらでご覧いただけます。
このリリースは、2022年の開発サイクルの第一段階に過ぎません。これらの素晴らしい改善をベースに、レンダリングパイプラインの改善、アーティストの使いやすさ、ネットコードなど、他のいくつかの重要な分野も提供する予定です。詳しくは、GDCで発表したロードマップの概要をご覧ください。私たちのパートナーになっていただき、ありがとうございます。

Androidデバイス上で直接システム トレースを実行してみよう!

概要

Androidネイティブでのプロファイリングといえばsystraceですが、Android 9(APIレベル28)以降のデバイスであれば、デバイス上から直接システムトレースの記録を行うことが可能です。 今回はデバイス上からシステム トレースを行う方法を説明します。 設定さえ行っておけば、複雑な操作をが必要なく1タップでシステムトレースの記録を行うことが出来る為、エンジニア以外(例えばQAスタッフやデバッカー)にデバイスを渡して「あとはよろしく」という事が可能になります。

事前準備

Androidバイス上で事前準備を行う必要がありますが、1度だけ設定すれば良く、設定自体も複雑でじゃない為、手順通りに行えば躓くこともない筈です。

Android OSを Android 9以降へアップデートする

OSはAndroid 9以降である必要があります。

設定 > デバイスの情報 > Androidバージョンの値が9以上であることを確認して下さい。

9未満の場合は、 設定 > システム >システム アップデートよりシステムのアップデートを行い、Androidバージョンを9以上へアップデートを行う必要がありますが、アップデートが提供されていない場合は、デバイス上からシステムトレースを行うことは出来ませんのでご注意下さい。

開発者向けオプションの使用

開発者向けオプションが有効である必要があります。 下記の手順で「開発者向けオプションの使用」を有効にしていきます。

設定 > デバイス情報の一番下の項目にあるビルド番号を連打して下さい。 これにより、設定 > システム開発者向けオプションの項目が追加されるので、 設定 > システム > 開発者向けオプションにある開発者向けオプションの使用を有効にします。

クイック設定タイルへ[システム トレース]を追加する

クイック設定にシステムトレース用のタイルを追加することで、ワンステップでシステムトレースが実行出来る為、下記の手順でタイルの追加を行います。

設定 > システム > 開発者向けオプション > システム トレース > [クイック設定]タイルの表示を有効にする

事前準備はここ迄です。

システムトレースの記録

それではシステムトレースの記録を実行してみましょう! システムトレースを開始するには、Home画面上部から下の向けてスワイプを行いクイック設定タイルを表示し、[トレースを記録]をタップします。クイック設定にタイルを追加した直後では新規のタイルは左上に追加されています。(画像では文字が見切れていますがトレースをと表示されている部分です。)

システムトレースの記録を終了する場合、同様に先程のタイルの表示が[トレースを停止]に変わっているので、そのタイルをタップすれば記録が終了します。

操作としては下記の2Stepになりますが、これだけであれば複雑な知識を覚える必要もありません。

  • クイック設定を表示
  • システムトレースのタイルを押す

システムトレースの結果を分析してみよう

システムトレースの結果を取得する

分析を行う為には、デバイスに保存されたシステムトレースの結果をPCへコピーする必要があります。 ADBコマンドなどで取得する方法もありますが、ここではGoogle Drive経由で取得する方法を説明します。

設定 > システム > 開発者向けオプション > システム トレース > トレース ファイルを表示 をタップします。

バイスに保存されている、システムトレースが行われたファイルの一覧が表示されているので、コピーしたいファイルを選択し、 ファイルアプリケーションで開きます。 ファイルのプレビューを行うことは出来ませんが、画面上部もGoogleDriveアイコンをクリックするとGoogleドライブ上へファイルをコピーすることが出来ます。その後、PC側でGoogle Driveからトレースファイルをダウンロードして下さい。

Perfettoでファイルを開く

ここからはPC上での作業です。 システムトレースしたファイルの分析にはPerfettoというWebアプリを使用します。

Google Chrom等でPerfettoを開き、画面左のナビゲーションメニューから「Open trace file」を選択し、先程PCへ保存したトレースファイルを選択します。 (※今回の趣旨から外れますが、Record new traceを選択することでPerfettoからシステムトレースの記録を行うことも可能です。)

操作はAWSDキーで行います。 詳しい操作方法や、データの見方は別の機会に解説します。

以上です!

Shader Cacheを削除してみよう!

Shader Cacheとは?

OpenEL GSのデバイスでは、Shader(Snipet)はRuntime上(デバイスで実行されるアプリケーション内)でGPU Programにコンパイルされます。このコンパイルは非常に処理負荷が高い為、コンパイルされたGPU ProgrameをCacheして再利用しようという仕組みがUnityに組み込まれています。 このCacheされたGPU ProgramをShader Cacheと呼んでいます。

Shader Cacheが利用できる条件

OpenEL GSの端末で必ずしもShader Cacheが利用できる訳ではなく、端末が下記の何れかの条件を見たいしている必要があります、

  • OpenEL GS 3.0以上に対応している
  • GL_OES_get_program_binary/GL_ARB_get_program_binary extensionが有効

Shader Cacheが保存されている場所

Application.temporaryCachePathの"UnityShaderCache"以下に保存されています。

Shader Cahe削除する方法

ここからが本題。

何がしかの理由(ストレージサイズを圧迫するなど)でShader Cacheを削除した場合があるかもしれません。 その場合、上記ディレクトリを削除すれば良い筈ですが、何が起こるか分からない為、Shader Cacheを削除するAPIを使用した方が安全かもしれません。 UnityのスクリプトAPIには記載がありませんが、モバイルプラットフォーム用のインターフェースであるHandheldクラスにShader Cacheクリア用のAPIが用意されています。

Handheld.ClearShaderCache()

非公開である理由は不明ですが、確認した限り、Unity2019.1以降では使用出来るようです。 ※非公開な為、リリースビルドでの使用は辞めた方が良いかもしれません。

以上です!!

【Android】Gradle Template変数一覧を作ってみよう!

概要

Androidプラットフォームでビルドを行う際、Gradle Templateをベースとしてbuild.gradleが生成されます。 これらに関しては、マニュアルで説明はされていますが、Template変数はマニュアルに記載されていないものが多々あります。そこで、マニュアルを補完するという意味でTemplate変数の一覧を作成しました。 調査はUnity2020.3.27で行っている為、他のバージョンでは多少異なる場合がありますのでご注意下さい。 各Template変数が展開する値や条件に関しては別の記事で解説します。

Template変数一覧

変数名 説明
ABIFILTERS Target Architecturesで有効になっているアプリケーションバイナリ―インタフェースを展開します
APIVERSION コンパイル時に使用するAndroid SDKのバージョンを展開します
APPLICATIONID Package Nameを展開します
APPLY_PLUGIN Kotlinがプロジェクトに含まれている場合、Kotolin Androidプラグインを追加します
ARTIFACTORYREPOSITORY Artifact Repository のURLを展開します
BUILD_SCRIPT_DEPS kotolin-gradle-pluginのclasspathを展開します
BUILDTOOLS Android SDK Build Toolsのバージョンを展開します
BUILT_APK_LOCATION 一般向けに公開されているUnityEditorでは展開されることはありません
DEPS 依存関係コンフィグレーションを展開します
DIR_GRADLEPROJECT Gradleプロジェクトの出力先を展開します
DIR_UNITYPROJECT Unityプロジェクトのディレクトリを展開します
EXTERNAL_SOURCES Symlink Sourcesが有効な場合、sourceSetsブロックを展開します
IL_CPP_BUILD_SETUP libil2cpp.soをビルドする為の定義を展開します
INCLUDES unityLibraryモジュールに含まれるライブラリとPlay Asset Packの一覧を展開します
LAUNCHER_SOURCE_BUILD_SETUP 一般向けに公開されているUnityEditorでは展開されることはありません
LIBSDKTARGET Androidライブラリプロジェクトに含まれるproject.properiesから取得したTarget SDKバージョンを展開します
MINIFY_DEBUG Player Settings >Publishing Settings > Minify > Debugの値を展開します
MINIFY_RELEASE Player Settings >Publishing Settings > Minify >Releaseの値を展開します
MINSDKVERSION Player Settings >Other Settings>Identification>minimum API Levelの値を展開します
PACKAGING_OPTIONS packagingOptionsブロックを展開します
PACKAGENAME Package Nameを展開します
PATH_STAGINGAREA Temp/StagingArea
PLAY_ASSET_PACKS Data Pack Nameを展開します
PATH_BUILDTOOLS ビルドツールへのパスを展開します
PATH_PLUGINS Android Pluginのパスを展開します
REPOSITORIES Maven Centralへの参照を含んだrepositoriesブロックを展開します
SIGN Custom KeyStoreの設定値を展開します
SIGNCONFIG ビルドが署名される場合は signingConfig signingConfig.release に、署名されない場合は signingConfig signingConfig.debugが展開します
SOURCE_BUILD_SETUP 一般向けに公開されているUnityEditorでは展開されることはありません
SPLITS Split APKs by target architectureが有効な場合、splits.abiブロックを展開します
SPLITS_VERSION_CODE Split APKs by target architectureが有効な場合にビルドバリアント用のブロックを展開します
TARGETSDKVERSION Project Settings>Player>Other Settings>Identification>Target API Levelの値を展開します
USER_PROGUARD Custom Proguard Fileが有効な場合、proguard-user.txtを追加します
VERSIONCODE Project Settings>Player>Other Settings>Identification>Bundle Version Codeの値を展開します
VERSIONNAME Project Settings>Player>Other Settings>Identification>Version*の値を展開します

TextAsset.textプロパティの実装を比較してみよう!(Unity2019vsUnity2020)

概要

Unity2020へバージョンアップしてから、TextAssetのtextプロパティの処理負荷が上がっている気がしたので、Unityのソースコードを確認したらプロパティへアクセスする毎にbytesデータを処理するように変更されていたというお話しです。

Unityのソースコードについて

UnityのソースコードC#で実装されている部分はGitで公開されているので、なんかUnity怪しいと思ったら確認してみましょう。 github.com

TextAsset.textの比較

Unity2019.4及びUnity2020.3ではそれぞれ下記のようにtextプロパティが実装されています。

Unity2019.4の場合

public extern string text { get; }

Unity2020.3の場合

public string text
{
     get
     {
          return DecodeString(bytes);
     }
}

Unity2019では単純なgetterでしたが、Unity2020ではDecodeStringという処理を噛ましてその返値がreturnされています。 DecodeStringの実装もTextAsset.csで行われていますが処理内容を見ると、EncordingClassを使って変換処理を行っているようです。 ちょっと前にCamera.mainでFindTagをやっていたのを直したと思ったら、今度はTextAsset.textが改悪されてしまったようです。 もし、TextAsset.textへ頻繁にアクセスするような部分があるのであれば、変数にtextの内容をキャッシュして変数側にアクセスすることをお勧めします。