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);
        }
Beispiel #2
0
        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();
 }
Beispiel #4
0
        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;
            }
        }
Beispiel #5
0
    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;
            }
        }
    }
Beispiel #6
0
 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;
 }