-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathAssetBundleLib_Mono.cs
143 lines (116 loc) · 4.02 KB
/
AssetBundleLib_Mono.cs
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
using System;
using System.IO;
using System.Linq;
using System.Reflection;
using MelonLoader;
using UnityEngine;
using Object = UnityEngine.Object;
namespace Libraries
{
public class AssetBundleLib
{
/// <summary>
/// The Loaded AssetBundle, Null By Default
/// </summary>
public AssetBundle bundle = null;
public bool HasLoadedABundle = false;
public string error = "";
/// <summary>
/// Loads An Asset Bundle For Using Data Such As Sprites
/// </summary>
/// <param name="resource">The Path To The Embedded Resource File - Example: CVRButtonAPI.Resources.plaguelogo.asset</param>
/// <returns>True If Successful</returns>
public bool LoadBundle(string resource)
{
if (HasLoadedABundle)
{
return true;
}
try
{
if (string.IsNullOrEmpty(resource))
{
error = "Null Or Empty Resource String!";
return false;
}
var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resource);
if (stream != null && stream.Length > 0)
{
var memStream = new MemoryStream((int)stream.Length);
stream.CopyTo(memStream);
if (memStream.Length > 0)
{
return LoadBundle(memStream.ToArray());
}
error = "Null memStream!";
}
else
{
error = "Null Stream!";
}
var resourcename = resource.Replace(resource.Substring(resource.LastIndexOf(".")), "").Substring(resource.LastIndexOf("."));
var assetBundle = AssetBundle.GetAllLoadedAssetBundles().First(o => o.name == resourcename);
assetBundle.hideFlags |= HideFlags.DontUnloadUnusedAsset;
bundle = assetBundle;
return false;
}
catch (Exception ex)
{
error = ex.ToString();
return false;
}
}
/// <summary>
/// Loads An Asset Bundle For Using Data Such As Sprites
/// </summary>
/// <param name="resource">The byte[] Of The Embedded Resource File - Example: Properties.Resources.plaguelogo.asset</param>
/// <returns>True If Successful</returns>
public bool LoadBundle(byte[] resource)
{
if (HasLoadedABundle)
{
return true;
}
try
{
var assetBundle = AssetBundle.LoadFromMemory(resource);
if (assetBundle != null)
{
assetBundle.hideFlags |= HideFlags.DontUnloadUnusedAsset;
bundle = assetBundle;
HasLoadedABundle = true;
return true;
}
HasLoadedABundle = true;
}
catch (Exception ex)
{
error = ex.ToString();
return false;
}
return false;
}
/// <summary>
/// Loads An Asset From The Previously Loaded AssetBundle
/// </summary>
/// <param name="str">The Internal Name Of The Asset Inside The AssetBundle</param>
/// <returns>The Asset You Searched For, Null If No AssetBundle Was Previously Loaded</returns>
public T Load<T>(string str) where T : Object
{
try
{
if (HasLoadedABundle)
{
var Asset = bundle.LoadAsset(str, typeof(T)) as T;
Asset.hideFlags |= HideFlags.DontUnloadUnusedAsset;
return Asset;
}
}
catch (Exception ex)
{
error = ex.ToString();
}
return null;
}
}
}