Unityに関連する記事です

Addressables(アドレッサブル)


 同じシーンを読み込もうとすると Exception エラーになる

マテリアルとシェーダー


 プレファブをロードして生成したとき、マテリアルとシェーダーが正常にアサインされていてもピンクになるときがある。
その場合には、シェーダーのディレクトリ(アドレス)を指定して再度アサインすれば正常に表示される。


[SerializeField]
string shaderStr = "UI/Hidden/UI-Effect-Shiny";   // デバッグログで handle.Result.name で出た名前にする。シェーダー名のみでは見つからない

public async UniTask LoadPrefabsAsync() {

    // 依存関係の読み込み
    var dependencies = Addressables.DownloadDependenciesAsync(skillDetailReference);
    await dependencies.Task;

    if (dependencies.Status == AsyncOperationStatus.Succeeded) {
        Addressables.LoadAssetAsync<GameObject>(skillDetailReference).Completed += async (obj) => {
        skillDetail = obj.Result;
        skillDetailPrefab = skillDetail.GetComponent<SkillDetail>();

        // 依存関係と一緒に読み込まれているため、この部分は不要
        //var handle = Addressables.LoadAssetAsync<Shader>(uiEffectShaderReference);
        //await handle.Task;
        //Debug.Log(handle.Result.name);

        skillDetail.GetComponent<UnityEngine.UI.Image>().material.shader = handle.Result;  // こっちだけだと適用にならないので、下の処理をする

        Shader shader = Shader.Find(shaderStr);
        if (shader != null) {
            skillDetail.GetComponent<UnityEngine.UI.Image>().material.shader = shader;
        } else {
            Debug.Log(shaderStr + ": シェーダーが見つかりません。");
        }
    }
}

 また、ビルトインシェーダーの場合には、Project Settings 内の Graphics の Always Included Shaders の設定でシェーダーを追加して Save to Asset する。

【Unity】AssetBundle化したPrefabのシェーダー参照が壊れる現象
https://appleorbit.hatenablog.com/entry/2015/10/25...




上記の補足


 UI 上に表示させるためのパーティクルに設定している UI/Additive のシェーダーは、エディターだとピンクになるが、実機だとちゃんと表示される。
続けて2面にいったら剥げた

 ダウンロードしたアセットの情報は保持される
そのためロード時間も自動的に短縮される
現在 初回は音がなるまでに約10秒、ゲーム画面出るまでに20秒
次回以降は約5秒で音がなって、続けて約10秒でゲーム画面になる


 開放しているステージを再度獲得してしまう
2回目以降、パーティクルだけ剥がれる

 => Editor だけの問題


原因


 Android 環境での Shader の適用になるので、エディターで実行した際にピンクになるのは問題なし。
常に実機でテストすること。

  Shader を再設定する処理をコメントアウトしたが、実機では問題なかった
 ◆´,僚萢をしていた場合、実機では2回目以降に Main シーンへ遷移した際にシェーダーが外れてパーティクルのみピンクになる症状がみられたが、
   ,僚萢をしなければ、2回目以降でも問題なくパーティクルにも Shader が適用された

 以上のことから、Addressables において Android 環境で開発する場合、エディターでのデバッグは不要。
無理にピンクを修正する必要もない。


AssetReference.ToString () と AssetGUID 変数について


 AssetReference.ToString () と AssetGUID 変数は、GUIDの情報が取れる。そのため、アサインしているファイルの名前ではない

https://docs.unity3d.com/Packages/com.unity.addres...




コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



プログラムの基礎学習

コード練習

技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

3Dトップビューアクション(白猫風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます