mirror of
https://github.com/Alex-Rachel/TEngine.git
synced 2025-08-14 16:51:28 +00:00
AssetsReference支持Unity实例化接口GameObject.Instantiate
AssetsReference支持Unity实例化接口GameObject.Instantiate
This commit is contained in:
@@ -20,19 +20,26 @@ namespace TEngine
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[DisallowMultipleComponent]
|
||||||
public sealed class AssetsReference : MonoBehaviour
|
public sealed class AssetsReference : MonoBehaviour
|
||||||
{
|
{
|
||||||
|
private static readonly Dictionary<GameObject, int> _gameObjectCountMap = new Dictionary<GameObject, int>();
|
||||||
|
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
private GameObject sourceGameObject;
|
private GameObject sourceGameObject;
|
||||||
|
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
private List<AssetsRefInfo> refAssetInfoList;
|
private List<AssetsRefInfo> refAssetInfoList;
|
||||||
|
|
||||||
private IResourceModule _resourceModule;
|
private static IResourceModule _resourceModule;
|
||||||
|
|
||||||
private void OnDestroy()
|
private void CheckInit()
|
||||||
{
|
{
|
||||||
if (_resourceModule == null)
|
if (_resourceModule != null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
_resourceModule = ModuleSystem.GetModule<IResourceModule>();
|
_resourceModule = ModuleSystem.GetModule<IResourceModule>();
|
||||||
}
|
}
|
||||||
@@ -41,10 +48,54 @@ namespace TEngine
|
|||||||
{
|
{
|
||||||
throw new GameFrameworkException($"resourceModule is null.");
|
throw new GameFrameworkException($"resourceModule is null.");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CheckRelease()
|
||||||
|
{
|
||||||
|
if (_gameObjectCountMap.TryGetValue(sourceGameObject, out var count))
|
||||||
|
{
|
||||||
|
if (count <= 1)
|
||||||
|
{
|
||||||
|
_gameObjectCountMap.Remove(sourceGameObject);
|
||||||
|
_resourceModule.UnloadAsset(sourceGameObject);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_gameObjectCountMap[sourceGameObject] = count - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Log.Warning($"sourceGameObject is not invalid.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CheckAdd()
|
||||||
|
{
|
||||||
|
if (_gameObjectCountMap.TryGetValue(sourceGameObject, out var count))
|
||||||
|
{
|
||||||
|
_gameObjectCountMap[sourceGameObject] = count + 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_gameObjectCountMap[sourceGameObject] = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Awake()
|
||||||
|
{
|
||||||
if (sourceGameObject != null)
|
if (sourceGameObject != null)
|
||||||
{
|
{
|
||||||
_resourceModule.UnloadAsset(sourceGameObject);
|
_gameObjectCountMap[sourceGameObject] = _gameObjectCountMap.TryGetValue(sourceGameObject, out var count) ? count + 1 : 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnDestroy()
|
||||||
|
{
|
||||||
|
CheckInit();
|
||||||
|
if (sourceGameObject != null)
|
||||||
|
{
|
||||||
|
CheckRelease();
|
||||||
}
|
}
|
||||||
|
|
||||||
ReleaseRefAssetInfoList();
|
ReleaseRefAssetInfoList();
|
||||||
@@ -77,6 +128,7 @@ namespace TEngine
|
|||||||
|
|
||||||
_resourceModule = resourceModule;
|
_resourceModule = resourceModule;
|
||||||
sourceGameObject = source;
|
sourceGameObject = source;
|
||||||
|
CheckAdd();
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user