UnityでAddressableを使っているのですが
Addressableで取得したAudioClipの長さをBlock外で取得したいのですが
どうすればできるでしょうか?
メンバー変数で定義すればそのクラス内では取得できると思っていたのですが
違うのでしょうか?ルールがあるのでしょうか?
環境)
PC: mac
Unity2018.3.0f2
言語:C#
具体例)
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.ResourceManagement.AsyncOperations; using UnityEngine.UI; public class Test2Script : MonoBehaviour { #pragma warning disable 649 [SerializeField]GameObject SoundsObject; [SerializeField]GameObject ImageObject; AudioSource testAudioSource; AudioClip audioClip; float audioClipNum; //メンバー変数で定義する // Start is called before the first frame update void Start() { Debug.Log("OutBlock" + AddressableScript()); //0になってしまう(取得できない) } float AddressableScript() { Addressables.LoadAssetAsync<AudioClip>("Assets/Sounds/epinpon.ogg").Completed += op => { audioClip = op.Result as AudioClip; SoundsObject.GetComponent<AudioSource>().PlayOneShot(audioClip); audioClipNum = audioClip.length; Debug.Log("InBlock" + audioClipNum); //ここでは正しい値が表示される }; return audioClipNum; } } //結果: OutBlock = 0 //結果: InBlock = 1.567347
前提・実現したいこと
ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
ソースコード
試したこと
IEnmuratorを使って処理を非同期終了後に起きるようにしましたが
やはり取得することができません。
修正したコードは下記です。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.ResourceManagement.AsyncOperations; using UnityEngine.UI; public class Test2Script : MonoBehaviour { #pragma warning disable 649 [SerializeField]GameObject SoundsObject; [SerializeField]GameObject ImageObject; AudioSource testAudioSource; AudioClip audioClip; float audioClipNum; //メンバー変数で定義する // Start is called before the first frame update void Start() { testAudioSource = SoundObject.GetComponent<AudioSource>(); StartCoroutine("AddressableScript"); } IEnumerator AddressableScript() { Addressables.LoadAssetAsync<AudioClip>("Assets/Sounds/epinpon.ogg").Completed += op => { audioClip = op.Result as AudioClip; SoundsObject.GetComponent<AudioSource>().PlayOneShot(audioClip); audioClipNum = audioClip.length; Debug.Log("InBlock" + audioClipNum); //ここでは正しい値が表示される }; yield return null; Debug.Log("OutBlock = " + audioClipNum); } } //結果: OutBlock = 0 //結果: InBlock = 1.567347
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/18 21:15