public static AsyncOperationHandle <GameObject> LoadGameObjectAsync(AssetReferenceGameObject pAsset, Action <float> pProgress = null, Action <GameObject> pOnCompleted = null) { var operation = pAsset.LoadAssetAsync(); WaitLoadTask(operation, pProgress, pOnCompleted); return(operation); }
public async static Task CreatePool(AssetReferenceGameObject reference, PoolingData poolingData) { if (ContainsReference(reference)) { return; } var pool = new Pool(); pool.assetReference = reference; var operationHandle = reference.LoadAssetAsync(); operationHandle.Completed += (op) => pool.loadedAsset = op.Result; int spawnCount = poolingData.GetSpawnCountFor(reference); #if UNITY_EDITOR var parent = new GameObject($"{reference.editorAsset.name} - Pool").transform; #endif for (int i = 0; i < spawnCount; i++) { var opHandle = reference.InstantiateAsync(Vector3.zero, Quaternion.identity); var instantiatedObject = await opHandle.Task; #if UNITY_EDITOR instantiatedObject.name = $"{reference.editorAsset.name} - {Guid.NewGuid()}"; #endif pool.ObjectList.Add(instantiatedObject); #if UNITY_EDITOR instantiatedObject.transform.SetParent(parent); #endif instantiatedObject.SetActive(false); } pools[reference.RuntimeKey] = pool; }
void Start() { leftObject.LoadAssetAsync(); rightObject.LoadAssetAsync(); spawnMaterial.LoadAssetAsync(); midMaterial.LoadAssetAsync(); lateMaterial.LoadAssetAsync(); }
private void Method() { // * Valid 검사를 수행하지 않으면 // 이미 로드되었는데도 중복 로드될 수 있다. // 1-1. 애셋 레퍼런스로부터 메모리에 로드 및 핸들 참조 if (!redCubeReference.IsValid()) { redCubeHandle = redCubeReference.LoadAssetAsync(); } // 1-2. 메모리에 로드 + 성공 시 수행할 동작 지정 if (!redCubeReference.IsValid()) { redCubeReference.LoadAssetAsync().Completed += (AsyncOperationHandle <GameObject> handle) => { // 핸들 참조 등록 redCubeHandle = handle; // 로드 완료 시 수행할 동작들 redCubePrefab = handle.Result; }; } // 2. 메모리에 적재된 애셋을 실제로 사용 Instantiate(redCubePrefab); // 3-1. 애셋 레퍼런스를 기반으로 메모리에서 해제 if (redCubeReference.IsValid()) { redCubeReference.ReleaseAsset(); } // 3-2. 핸들을 기반으로 메모리에서 해제 if (redCubeHandle.IsValid()) { Addressables.Release(redCubeHandle); redCubePrefab = null; } }
private void LoadItemAtIndex(SpawnItemList itemList, int index) { if (m_instanceObject != null) { //Throwing Data Loss Error - Christian /* * Destroy(m_instanceObject); */ } m_assetLoadedAsset = itemList.GetAssetReferenceAtIndex(index); var spawnPosition = new Vector3(); var spawnRotation = Quaternion.identity; var parentTransform = this.transform; var loadRoutine = m_assetLoadedAsset.LoadAssetAsync(); loadRoutine.Completed += LoadRoutine_Completed; void LoadRoutine_Completed(UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationHandle <GameObject> obj) { m_instanceObject = Instantiate(obj.Result, spawnPosition, spawnRotation, parentTransform); //Set name, so object can be stored in correct Output folder m_instanceObject.name = obj.Result.name; if (StartingEulerAngles == new Vector3(0, 0, 0) && startingPhotoTaken == false) { //Update Object Name var for screenshoot objectNameGet = m_instanceObject.name; //First Screenshot goes here and increment counter cameraScreenshot.TakeScreenshot(); //First Photo has been startingPhotoTaken = true; } } }
void LoadAndInstantiate(AssetReferenceGameObject reference) { reference.LoadAssetAsync <GameObject>().Completed += FinishByInstantiate; }
protected override void Instantiate() { _reference.LoadAssetAsync <GameObject>().Completed += FinishByInstantiate; }
void Start() { //Request loading refObject.LoadAssetAsync().Completed += OnPrefabLoaded; }