Addressables パッケージの 1.8.3/1.8.4 で Sprite Atlas のロード時にエラー
この様な Sprite Atlas を作成し、 Box3 の Sprite を読み込むプログラムを書いた所、以下の様なエラーが発生しました。
Exception encountered in operation UnityEngine.ResourceManagement.ResourceManager+CompletedOperation`1[UnityEngine.Sprite], result='', status='Failed': Exception of type 'UnityEngine.AddressableAssets.InvalidKeyException' was thrown., Key=BoxAtlas[Box3], Type=UnityEngine.Sprite UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationBase`1:<.ctor>b__33_0(AsyncOperationHandle) DelegateList`1:Invoke(AsyncOperationHandle) (at Library/PackageCache/com.unity.addressables@1.8.4/Runtime/ResourceManager/Util/DelegateList.cs:69) UnityEngine.AddressableAssets.Initialization.<>c__DisplayClass14_0:<LoadContentCatalogInternal>b__0(AsyncOperationHandle`1)
調べてみるとこちらが見つかりました。バグ報告は既に行われている様です。
Loading sprites via AssetReferenceAtlasedSprite broken after upgrade to 1.8.3 - Unity Forum
https://forum.unity.com/threads/loading-sprites-via-assetreferenceatlasedsprite-broken-after-upgrade-to-1-8-3.873283/
一つ前のバージョン 1.7.5を使った場合にはエラー無く、実行されました。
HDR動画周りの規格についてのまとめ
HDR映像データの伝送についての規格
HDR10
Ultra HD Blu-ray 向けの規格。全米民生技術協会( Consumer Technology Association )によって策定。RGBの諧調がそれまでの SDR( Standard Dynamic Range )では 8bit だったのが HDR10 では 10bit になっている。
Dynamic Range の規定以外にも以下ものが規定されています。
- 色域:Rec. 2020
- ガンマカーブ:PQ(Perceptual Quantizer)
PQ はWeb配信、映画コンテンツ向けの規格。人間の視覚特性に合わせたガンマカーブ。詳細については以下を参照。
Perceptual Quantizer
https://en.wikipedia.org/wiki/High-dynamic-range_video#Perceptual_Quantizer
HLG(Hybrid Log-Gamma)
テレビ放送番組向け。NHKとBBCが提唱している規格。RGBの諧調は 10bit 、色域はRec. 2020。 SDR ディスプレイとの互換性が有る。
Hybrid Log-Gamma - Wikipedia
https://en.wikipedia.org/wiki/Hybrid_Log-Gamma
HDR10+
HDR10+ Allianceによる HDR10 の拡張規格。 HDR10 の規格にダイナミックメタデータの仕様を追加したもの。RGBの諧調は最大 12bit まで使用可能な規格。
2018年に急速な拡大が見込まれるHDRの最新拡張規格「HDR10+」とは? - 価格.comマガジン
https://kakakumag.com/av-kaden/?id=11718
ディスプレイ規格
DisplayHDR
PCモニターに必要な要件を定めたもの。ディスプレイの品質保証の規格。この規格はHDR10への対応を必須としている。
グレードとして以下のものが有る。数字が大きいほど品質が高い。
- DisplayHDR 400
- DisplayHDR 600
- DisplayHDR 1000
高画質モニターの目印! 「DisplayHDR」対応のLG液晶モニター、何がどうすごいか徹底検証 (1/3) - PHILE WEB
https://www.phileweb.com/review/article/201906/07/3440.html
Windows で HDR モニターを使う手順
Windows 10 の HDR と詳細な色の設定 - Windows Help
https://support.microsoft.com/ja-jp/help/4040263/windows-10-hdr-advanced-color-settings
HDR環境の Windows で画面キャプチャをする方法
ショートカット「Windowsキー+Altキー+PrintScreenキー」でキャプチャを行うと JPEG XR と PNG ファイルで保存されます。この時、 JPEG XR ファイルには HDR の情報を保った状態でキャプチャが行われています。
HDMI ケーブルについての注意点
ディスプレイが HDR を表示可能な性能を持っていても使用している HDMI ケーブルのバージョンによっては正しく表示されない事もあります。商品に付属していたものを使う場合は大丈夫かと思いますが、別途購入する時には気を付けましょう。
(「価格.com」からの引用)
価格.com - HDMIケーブルの選び方
https://kakaku.com/kaden/hdmi-cable/guide_2211/
アプリやサービスでのHDRサポート状況
VLC
バージョン3.0.0からサポート。
VLCメディアプレーヤー3.0.0登場。HDRや8K再生支援、Chromecast対応 - AV Watch
検証に使える動画
関連情報
High-dynamic-range video - Wikipedia
https://en.wikipedia.org/wiki/High-dynamic-range_video
Rec. 2020 - Wikipedia
https://en.wikipedia.org/wiki/Rec._2020
What's HDR | HDR | 映像制作機材 | 法人のお客様 | ソニー
https://www.sony.jp/products/Professional/c_c/hdr/index01.html
よくわかる、HDR徹底解説! ガンマカーブの違い | EIZO株式会社
https://www.eizo.co.jp/eizolibrary/color_management/hdr/index2.html
4Kテレビ選びの重要ワードHDR=「HDR10」「Dolby Vision」「HLG」って何? - 価格.comマガジン
https://kakakumag.com/av-kaden/?id=10519
Android 環境で AssetBundle 化した Video Clip を再生する時の注意点
サポートは Unity 2018.1 から
まず、 Android 環境での AssetBundle 化した Video Clip の再生は Unity 2018.1 からのサポートに成ります。それ以前の Unity では使えません。
2018.1のリリースノートに「Video: Added support for reading videos from AssetBundles on Android.」という記述が有ります。
What's new in Unity 2018.1 - Unity
https://unity3d.com/jp/unity/whats-new/unity-2018.1.0
ファイルの場所とフォーマット
次に 公式ドキュメントの VideoPlayer のページを見ると Android の部分に以下の記述が有ります。
Playback from asset bundles is only supported for uncompressed bundles, read directly from disk.
ざっくり翻訳すると「AssetBundle から再生するにはディスクから直接読み込める非圧縮の AssetBundle だけサポートしてるよ」と書かれています。
つまり、 AssetBundle を作る時の BuildPipeline.BuildAssetBundles() のオプションで BuildAssetBundleOptions.UncompressedAssetBundle を使わないとダメという事です。
圧縮したものを読み込もうとするとこの様なエラー文が出力されます。
AndroidVideoMedia::OpenExtractor could not translate archive:/CAB-xxxxxxxxxxxxxxxxx/CAB-yyyyyyyyyyyyy.resource to local file. Make sure file exists, is on disk (not in memory) and not compressed. AndroidVideoMedia: Error opening extractor: -10004
また、以下の様にダウンロードしたものをそのまま再生すると失敗します。
using (UnityWebRequest uwr = UnityWebRequestAssetBundle.GetAssetBundle(url)) { yield return uwr.SendWebRequest(); if (uwr.isNetworkError || uwr.isHttpError) { Debug.Log(uwr.error); } else { bundle = DownloadHandlerAssetBundle.GetContent(uwr); var vc = bundle.LoadAsset<VideoClip>("assets/movie.mp4"); videoPlayer.clip = vc; videoPlayer.Prepare(); } }
Application.persistentDataPath のフォルダなどに一度保存したものを再生する場合は問題無く再生されます。
[コード例(一部)]
string assetFilePath = Application.persistentDataPath + "/movie"; using (UnityWebRequest www = UnityWebRequest.Get(url)) { Debug.LogFormat("Start DL: {0}", url); yield return www.SendWebRequest(); if (www.isNetworkError || www.isHttpError) { Debug.Log(www.error); } else { File.WriteAllBytes(assetFilePath, www.downloadHandler.data); Debug.Log("AssetFile Path: " + assetFilePath); bundle = AssetBundle.LoadFromFile(assetFilePath); Debug.Log(bundle); Debug.Log("-------AssetNames"); foreach (var n in bundle.GetAllAssetNames()) { Debug.Log(n); } var vc = bundle.LoadAsset<VideoClip>("assets/movie.mp4"); Debug.Log(vc); videoPlayer.clip = vc; videoPlayer.Prepare(); } }
Graphics API
Vulkan の環境で再生出来るのは 2019.2.0 からです。それ以前の Unity で作ったアプリが Vulkan の環境で動画再生をするとクラッシュします。 OpenGL ES のみの環境で実行される様にアプリの設定を行っておきましょう。
Unity Issue Tracker - [Android][Vulkan][VideoPlayer] VideoPlayer causes a crash with Vulkan API
https://issuetracker.unity3d.com/issues/android-vulkan-videoplayer-video-doesnt-play-or-causes-a-crash-on-newer-version-of-unity-with-vulkan-api
Unity 2019.2.0 に「Android: The Unity video player can now be used with the Vulkan renderer.」という記述が有り、このバージョンから Vulkan 環境での再生に対応している事が確認できます。
What's new in Unity 2019.2.0 - Unity
https://unity3d.com/jp/unity/whats-new/2019.2.0
プロジェクトビューでアセットをダブルクリックした時に VS Code で開く問題の解消法
Unity でスクリプトエディターを Visual Studio Code に設定した状態でシーン切り替えをしようとすると、Scene ファイルがテキストファイルとして VS Code で開かれるという謎の現象が発生していたけど、VS Code 用のパッケージを 1.1.0 に上げたら直りました✌ pic.twitter.com/6xdJyJDeGO
— 石田ぎがしー📛⛽ (@ishida_gigacee) 2019年8月26日
手順
メニューから Window > Pakage Manager と選択。
インストール済みパッケージ一覧から「Visual Studio Code Editor」を選択。
検索欄から検索するのが速いです。
ドロップダウンをクリックし、バージョン 1.1.0 を選択。[Update to 1.1.0] ボタンをクリック。
Unity の Analytics 機能が行っているユーザ情報の送信を全て止める方法
※この記事ではあくまで Unity の Analytics 機能についての解説を行っています。実際の運用では別の機能で送信していないか、自分のプログラムで別途送信していないか、サードパーティ製のライブラリなどについても送信していないかチェックする必要が有る事にご注意下さい。
はじめに
現在の Apple のストアのガイドラインや Google の開発者ポリシーなどを確認すると子供向けアプリではユーザ情報の取得について一般的なアプリに比べて一段と気をつける必要が有る事が分かります。
App Store Reviewガイドライン - Apple Developer
https://developer.apple.com/jp/app-store/review/guidelines/#kids-category
ファミリー - Developer Policy Center
https://play.google.com/about/families/#!?zippy_activeEl=families-policy#families-policy
自分のアプリでユーザ情報を取得する必要が無い場合には全ての送信を止めるのが一番手っ取り早いです。今回はその方法を解説します。
なお、 Analytics では無いですがクラッシュや例外レポートを送信する Unity Cloud Diagnostics もユーザの情報を送信してると言えるのでこちらについてもしっかりと確認して必要に応じて無効にして下さい(※デフォルトで有効です)。
Unity IAP については実行時に Analytics 機能を無効化するとダッシュボードで収益の追跡は出来なくなりますが IAP の機能自体は正しく動作する様です。
Unity IAP without Analytics for kids games? - Unity Forum
https://forum.unity.com/threads/unity-iap-without-analytics-for-kids-games.689143/
ちなみに Unity では COPPA へ準拠した実装が簡単に実現出来ます。
送信を止める方法
以下のコードをプロジェクトに含める事で送信を止める事ができます。
public class DisableAnalytics : MonoBehaviour { [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] public static void OnRuntimeMethodLoad() { UnityEngine.Analytics.Analytics.enabled = false; UnityEngine.Analytics.Analytics.deviceStatsEnabled = false; UnityEngine.Analytics.Analytics.limitUserTracking = true; #if UNITY_2018_3_OR_NEWER UnityEngine.Analytics.Analytics.initializeOnStartup = false; #endif } }
※このコードは RuntimeInitializeOnLoadMethod() で呼んでいるのでシーンに配置されていなくても、プロジェクトに含まれているだけで動作します。
RuntimeInitializeOnLoadMethod() について詳しく知りたい方はこちらの記事などを参照下さい。
なお、昔の Unity では deviceStatsEnabled (エディタ上の Disable HW Statistics に対応。フラグは逆ですが(^_^;)) は有料ユーザしか無効に出来ませんでしたが Unity 2018.3 からは無料ユーザも無効に出来るようになりました。
Unity 2018.3 よりも前のバージョンを使用している無料ユーザの方はバージョンアップか有料ユーザへの変更を検討下さい。
送信が止まっている事を確認する方法
確認についてはパケットキャプチャをするのが一番確実です。パケットの中に unity3d.com に向けて送信されているものが無くなっていれば送信が止まっています。
iOS/Android でのパケットキャプチャ方法の一例をあげておきます。
(英語)Apple公式の記事。
日本語の解説記事。
Google Play には沢山のパケットキャプチャアプリが有りますが今回のチェックには SSL(https) に対応しているアプリが必要です。例えば以下のアプリなどが対応しています。
実際に使用するには気をつける部分が有るのでちゃんとマニュアル(英語)の GetStartedをしっかりと読んでから使いましょう。
Unity の Cloud Build が 5.5 以前のものがサポート外に
最近、 Unity の Cloud Build のページにこの様なメッセージが表示されいてました。
As of June 17 2019, Cloud Build no longer supports building projects on versions of Unity earlier than 5.6. If you were using an earlier version of Unity, you will need to update your build targets.
このメッセージは「2019/07/17 以降は Unity の Cloud Build でビルドには 5.6 以降の Unity を使用して下さい」というものです。つまり、 5.5 以前のものがサポート外となり、使えなくなるという事です。
現在の「Unity Version」の項目を確認してみた所、 5.5 系が選択出来なくなっていました。
また、 5.5 以前のバージョンを使っていた自分のビルド設定に対し、「無効にしました」というメールが届いていました。