SA_PrefabAsyncLoader.cs
1.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
////////////////////////////////////////////////////////////////////////////////
//
// @module Assets Common Lib
// @author Osipov Stanislav (Stan's Assets)
// @support support@stansassets.com
// @website https://stansassets.com
//
////////////////////////////////////////////////////////////////////////////////
using UnityEngine;
using System.Collections;
using System;
namespace SA.Common.Models {
public class PrefabAsyncLoader : MonoBehaviour {
private string PrefabPath;
public event Action<GameObject> ObjectLoadedAction = delegate {};
public static PrefabAsyncLoader Create() {
PrefabAsyncLoader loader = new GameObject("PrefabAsyncLoader").AddComponent<PrefabAsyncLoader>();
return loader;
}
void Awake() {
DontDestroyOnLoad(gameObject);
}
public void LoadAsync(string name) {
PrefabPath = name;
StartCoroutine(Load());
}
private IEnumerator Load() {
ResourceRequest request = Resources.LoadAsync(PrefabPath);
yield return request;
if(request.asset == null) {
Debug.LogWarning("Prefab not found at path: " + PrefabPath);
ObjectLoadedAction(null);
} else {
GameObject loadedObject = UnityEngine.Object.Instantiate (request.asset) as GameObject;
ObjectLoadedAction(loadedObject);
}
Destroy(gameObject);
}
}
}