質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

0回答

1738閲覧

シーンを読み直すとAssetBundleからロードできない

OROCHI_TUNGUS

総合スコア31

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2019/05/24 10:08

編集2022/01/12 10:55

こんにちは、現在以下のようなコードをAwakeに書いて、シーンを開いたときにAssetBundleからロードしたオブジェクトを表示するということをしようとしています

C#

1string assetBundlePath = Application.streamingAssetsPath + "/object"; 2assetBundle = AssetBundle.LoadFromFile(assetBundlePath); 3// ここまでは最初に実行するシーンでのみ行う 4// 2019/05/27 修正(シングルトンからのロードでした。お詫びして訂正します) 5GameObject EV = AssetBundleManager.Instance.assetBundle.LoadAsset<GameObject>(パス);

ところが、最初の1回は正常に読まれるのですが、シーンを再度読み直してLoadAssetを実行するとEVがNullになってしまいます
また、呼び出し時のassetBundleはデバッガで見ると「AssetBundleManager.Instance.assetBundle = "object (UnityEngine.AssetBundle)"」となっておりNullではありませんでした
このような現象を回避するためにはどのようにすればよいでしょうか?

<追記>
AssetBundleは以下のコードによるシングルトンです。このクラスをインポートした空オブジェクトを最初に起動されるシーンに配置しています。

using System.Collections; using System.Collections.Generic; using UnityEngine; public class AssetBundleManager : SingletonMonoBehaviour<AssetBundleManager> { /// <summary> /// アセットバンドルのインスタンス /// </summary> public AssetBundle assetBundle; public void Awake() { if (this != Instance) { Destroy(this); return; } DontDestroyOnLoad(this.gameObject); } /// <summary> /// 初回起動時にアセットバンドルを読ませる /// </summary> public void Start() { string assetBundlePath = Application.streamingAssetsPath + "/object"; assetBundle = AssetBundle.LoadFromFile(assetBundlePath); } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sakura_hana

2019/05/27 01:31

・2回目以降の読み込みで「assetBundle」はnullになっていますか?(もしそうなら「GameObject EV = 〜」の行でエラーが出ている筈ですが出ていますか?) ・「assetBundle」はstatic変数ですか?
OROCHI_TUNGUS

2019/05/27 01:46

assetBundleは修正にも書きましたとおりnullになっていません。このためEV呼び出しのところでもエラーは出ていません(結果としてEVがnullになっているだけです)
sakura_hana

2019/05/27 01:57

「EVがNullになる」ことを確かめたコードはどこにありますか?(同じAwake内でしょうか? もし違うなら「そもそもAwakeが呼ばれているか」を確認すべきかもしれません)
OROCHI_TUNGUS

2019/05/27 02:02

EVのnullはデバッガ(今回はvisualStudio)をアタッチして該当箇所にブレークポイントを貼り、ブレークした際の値を見て確認しました(変数名の上にカーソルを乗せると値がポップアップします) EVを呼び出す次の行でブレークポイントを貼って停止させて確認したため、Awakeが呼ばれていないということはないようです
ganta7188

2019/05/27 04:28

うーん、見た感じ大丈夫そうに見えるのですが、一応シングルトン周りの確認のため、空シーンを読み込んだ場合にはどうなるかと、シーン読み込み後のどのタイミングでassetBundleがnullになるのか、DebugLogなど使って確かめて見てください。
OROCHI_TUNGUS

2019/05/27 05:34

ContainsでEVの存在確認→1週目も2週目も存在 assetBundle→1週目も2週目もnullにならない 2週目のシーンを読み込む前に空シーンを経由する→状況変わらず といったところですね。LoadAssetは起動中1回しか読めないという縛りでもあるのでしょうか・・・?
ganta7188

2019/05/27 05:43

空シーンを読んだ時点でnullになりますか? この時点でnullなら、シーン読み込み時のUnloadAssetあたりが怪しくなりますね。 空シーンでは大丈夫で、AssetBundleManager が置いてあるシーンの読み込み時だけnullになるなら、シングルトンが怪しいと見ています。ただ可能性は薄そう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問