Unity recorderで「output height must be a power of 2」のエラーが出た。
縦横は2の階乗にしないとダメとのこと。
Powerで累乗という意味があることを知らなかった。
2の階乗の値にすれば大丈夫。
Unity recorderで「output height must be a power of 2」のエラーが出た。
縦横は2の階乗にしないとダメとのこと。
Powerで累乗という意味があることを知らなかった。
2の階乗の値にすれば大丈夫。
PCとquest2をUSB接続して、ファイルをquest2に送ろうとしたところ、quest2にデバイス認証のポップアップが出ない現象に襲われました。
今までなら、「接続したデバイスにファイルへのアクセスを許可しますか?」のポップアップが出て、許可したらPCと接続できた。
システムの「開発者」タブにある「USB接続ダイアログ」のトグルをONにしてないと出ない時があり、それがOFFになっているのかと思ったらなくなっている。
対応方法として、Quest2の下のメニューにある通知ボタンを押して、お知らせ画面を出します。
するとUSB接続をしていると以下の文言の通知があるので、これをクリックするとPCと接続できました。
「USBが検出されました。
このお知らせをクリックして、リンク済みのデバイスにファイルへのアクセスを許可できます。」
「USB接続ダイアログ」のトグルが無くなっていたのはアップデートでしょうか?
いきなりの変更びっくりでした。
android環境でassetbundleからUnityVideoPlayerを再生しようとした際、以下のエラーが発生した。
AndroidVideoMedia::OpenExtractor could not translate archive:/〇〇.resource to local file. Make sure file exists, is on disk (not in memory) and not compressed.
AndroidVideoMedia: Error opening extractor: -10004
訳すると、
OpenExtractor はローカル ファイルに変換できませんでした。ファイルが存在し、ディスク上にあり (メモリ内ではなく)、圧縮されていないことを確認してください。
assetbundle Browserでは無圧縮に設定されている。
バージョンの問題かとも考えた、
今回の取り組んでいるandroidのバージョンは12
以下のunityの公式のページには、
Android Pie and above, Unity supports playback from compressed asset bundles.
Android Pie以降の場合、Unity は圧縮されたアセット バンドルからの再生をサポートします。
12なので関係ない。
Note: Not all devices support resolutions greater than 640 × 360.
注: すべてのデバイスが 640 × 360 を超える解像度をサポートしているわけではありません。
念のため、640×360の解像度にしてみてもエラーメッセージは変わらず。
改修元のスクリプトを見るとアセットバンドルの読み取りが、、
AssetBundle.LoadFromMemory()となっていた。
AssetBundle.LoadFromFile()に変更すると読み取れ、再生できました。
なぜローカルのファイル読み込みでLoadFromMemoryを使っていたのか・・・
AssetBundleに"test.txt"を含め、テキスト情報だけ取得したかったのですが、
以下でできました。
AssetBundleCreateRequest acr = AssetBundle.LoadFromFileAsync("AssetBundleのパス");
TextAsset text = acr.assetBundle.LoadAsset<TextAsset>("test.txt");
以下の書き方でも取得できる。
TextAsset text = acr.assetBundle.LoadAsset("test.txt", typeof(TextAsset)) as TextAsset;
AssetBundleのロードしようと、以下のように書いたら、
var LoadedAssetBundle = AssetBundle.LoadFromFile("ファイルパス名"));
var prefab = LoadedAssetBundle.LoadAsset<GameObject>("オブジェクト名");
Instantiate(prefab);
次のエラーが出た。
ArgumentException: The Object you want to instantiate is null.
原因はLoadedAssetBundle.LoadAsset<GameObject>("オブジェクト名");に書いたプレハブのオブジェクト名の指定が間違っていたことでした。
こんなところ間違わないと思って、無駄に違うところ探しちゃった。悲しい。
UnityにてAndroid APIのレベルを変更するため、
コマンドプロンプトで、sdkmanagerを使用して、
Android SDKを入れようとした際以下のエラーが出ました。
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
at com.android.repository.api.SchemaModule$SchemaModuleVersion.<init>(SchemaModule.java:156)
at com.android.repository.api.SchemaModule.<init>(SchemaModule.java:75)
at com.android.sdklib.repository.AndroidSdkHandler.<clinit>(AndroidSdkHandler.java:81)
at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:73)
at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:48)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlSchema
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
UnityのEdit→External ToolsにてJDKのインストール先パスがあるので、
環境変数を設定してあげれば、動作するようになりました。