1) ミップマップをオフにすると、反射プローブが白い画像に変わるのはなぜですか
? 2) 2021.3 Android で、
再生のためにアセットバンドルからビデオをロードできません 3) SBP は、パッケージ化時に FBX などのモデル ファイルに余分なゲームオブジェクトが含まれる問題を解決できますか
? 4 ) Addressables は、Prefab 後に失われた既にパッケージ化された Mono スクリプトをロードします
これは 349 回目の UWA 技術知識共有プッシュです。UWA コミュニティで注目のトピックを選択し、UWA Q&A、コミュニティ投稿、その他の技術知識ポイントを取り上げ、誰もがより包括的に習得および学習できるようにします。
レンダリング
Q: 反射プローブでミップマップをオフにすると白い画像になりますが、これはなぜですか?
A: 次のオプションに関連しています。
Unity の公式マニュアルには、このオプションがミラー畳み込みの形式でキューブ マップのミップマップを処理すると記載されています。
ただし、ここでのミップマップは従来のミップマップとは異なり、異なる粗さに従って分割されています。
これはシェーダー コードでも確認できます。
この設定を none に変更すると、ミップマップがオンかどうかに関係なく、効果は同じになります。
回答を提供してくれた true@UWA Q&A コミュニティに感謝します
読み込み中
Q: Unity 2021.3 バージョンでは、Android は再生のために AssetBundle からビデオをロードします:
AndroidVideoMedia::OpenExtractor がアーカイブを翻訳できませんでした
1. 使用されるバージョンは Unity 2021.3.8 です。
2. ビデオをパッケージ化するときに圧縮は設定されません。
3. アセットバンドルは StreamingAssets ディレクトリに配置されます
。 4. 関連コード
btn.onClick.AddListener(() =>
{
AssetBundle ab = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/assetbundle/videos"+ "/1109.ab");
Debug.Log(ab == null);
videoPlayer.clip = ab.LoadAsset<VideoClip>("1109");
videoPlayer.Play();
});
///build
BuildPipeline.BuildAssetBundles(config.OutPath, BuildAssetBundleOptions.UncompressedAssetBundle, config.buildTarget);
問題:
Android 9.0 未満の携帯電話ではビデオをロードして再生できません。ログ:
Unity AndroidVideoMedia::OpenExtractor could not translate archive:/CAB-8621c60d70de42f9c22e8270082bc81a/CAB-8621c60d70de42f9c22e8270082bc81a. resource to local file. Make sure file exists, is on disk (not in memory) and not compressed.
Android9.0以降であれば問題ありません。
参考資料:
AssetBundle からビデオ再生をロードしたい場合は、圧縮しないように設定する必要があることをフォーラムの投稿から学びましょう:
Video: Support for reading videos from AssetBundles on Android. - Unity Forum
公式ドキュメントには次のようにも記載されています:
Unity は圧縮されていないアセット バンドルからの再生をサポートします Android Pie 以降の場合、Unity は圧縮されたアセット バンドルからの再生をサポートします。
上記によると、ビデオはロードされて再生されるはずですが、まだ問題があります。道教の友人でこの問題に遭遇した人はいるでしょうか。
また、ビデオリソースを扱う際の計画についてお聞きしたいのですが、ビデオリソースも AssetBundle に入れるのでしょうか、それともそのままリソース ディレクトリに直接入れるのでしょうか。
A1: セルフテスト後、ビデオを AssetBundle にパッケージ化しなくても解決できます。
または、このソリューションを参照してください:
ビデオ - Android 上のアセットバンドルに VideoClip をロードする | ページ 2 -
参考用の Unity フォーラム コード:
private IEnumerator loadVideo(string pathvideo) { assetBundleRequest = DownloadingScreenManager.getInstance().getMapAssetBundle()["vide_bundlename"].LoadAssetAsync(pathvideo); yield return assetBundleRequest; textAsset = (TextAsset)assetBundleRequest.asset; File.WriteAllBytes(Path.Combine(Application.persistentDataPath, pathvideo + ".mp4"), textAsset.bytes); string url = Application.persistentDataPath + "/" + pathvideo + ".mp4"; videoPlayer.url = url; }
質問の所有者である zerolj@UWA Q&A コミュニティの回答に感謝します。
A2: バンドル パッケージのビデオの再生には多くの問題があり、モデルによってパフォーマンスが異なり、ビデオを再生できるものもあれば、再生できないものもあります。私たちのアプローチは、バイナリをバンドルにパッケージ化し、ゲームの開始時にユーザー ディレクトリにコピーし、再生時にパスを指定して、最後に再生タイムアウトを処理することです。
回答を提供してくれた Li Wei @UWA Q&A コミュニティに感謝します
メモリ
Q: スクリプト可能なビルド パイプラインは、パッケージ化時に FBX などのモデル ファイルに余分なゲームオブジェクトが含まれる問題を解決できますか?
通常のアセット コンパイル プロセスのプログラミング モデルでは、多くの不必要なものが組み込まれます。最も顕著なのは、コピーされたビルドイン リソースであり、次に大量の Remapper メモリ消費が続きます。
現時点では SBP の機能を理解していないため、最適化のためにメッシュとアニメーションクリップをコピーするプロセスをまだ使用しています。
SBP には単一の AssetPath の下にある一部のファイル参照を削除する機能があるのだろうか? もう 1 つは、リソース参照 (エディター アイコン、シェーダーのデフォルト テクスチャなどと同様) を強制的に切断できるかどうかです。
A: 私自身でテストし、実行できることを確認しました。IBuildTask層に設定するだけで提案できます。
質問の所有者、Ou Yuesong@UWA Q&A Community の回答に感謝します。
アドレス指定可能
Q: Addressables でパッケージ化されたすべての Prefab について、ロード後に Mono スクリプトが失われます。Addressables のいくつかのバージョンを使用し、すべての MonoScript バンドル命名オプションを設定した後でも、状況は変わりません。
正しい設定がどこにあるのかわかりません。
A: スクリプトが失われた場合は、逆シリアル化中にリソースとコードが関連していないことを意味します。環境が異なる場合に備えて、リソースを再パッケージ化することをお勧めします。
回答を提供してくれた Li Wei @UWA Q&A コミュニティに感謝します
今日の共有はここまでです。人生には限界がありますが、知識には限界がありません。長い開発サイクルの中で、私たちが遭遇した問題は氷山の一角にすぎません。UWA コミュニティは喜んで同行し、一緒に探索し、共有します。より多くの開発者が UWA コミュニティに参加することを歓迎します。
UWA官网:www.uwa4d.com
UWA社区:community.uwa4d.com