Browse Source

SimpleGOPoolKit

master
coffee 6 months ago
parent
commit
612eead0cd
  1. 2
      Assets/Unity-Tools/Core/EasyPool/Core/IAbstractPool.cs
  2. 2
      Assets/Unity-Tools/Core/EasyPool/Core/RecyclablePoolConfig.cs
  3. 6
      Assets/Unity-Tools/Core/EasyPool/Core/RecyclablePoolInfo.cs
  4. 3
      Assets/Unity-Tools/Core/EasyPool/Editor.meta
  5. 105
      Assets/Unity-Tools/Core/EasyPool/Editor/SimpleGOPoolManagerInspector.cs
  6. 3
      Assets/Unity-Tools/Core/EasyPool/Editor/SimpleGOPoolManagerInspector.cs.meta
  7. 308
      Assets/Unity-Tools/Core/EasyPool/SimpleGOPool/SimpleGOPoolKit.cs
  8. 3
      Assets/Unity-Tools/Core/EasyPool/SimpleGOPool/SimpleGOPoolKit.cs.meta
  9. 22
      Assets/Unity-Tools/Core/EasyPool/SimpleGOPool/SimpleGameObjectPool.cs
  10. 110
      Assets/Unity-Tools/Demo/EasyPoolKit/SimpleGOPool/Cube.prefab
  11. 7
      Assets/Unity-Tools/Demo/EasyPoolKit/SimpleGOPool/Cube.prefab.meta
  12. 77
      Assets/Unity-Tools/Demo/EasyPoolKit/SimpleGOPool/Image.prefab
  13. 7
      Assets/Unity-Tools/Demo/EasyPoolKit/SimpleGOPool/Image.prefab.meta
  14. 779
      Assets/Unity-Tools/Demo/EasyPoolKit/SimpleGOPool/SimpleGOPool.unity
  15. 54
      Assets/Unity-Tools/Demo/EasyPoolKit/SimpleGOPool/SimpleGOPoolManager.cs

2
Assets/Unity-Tools/Core/EasyPool/Core/IAbstractPool.cs

@ -31,7 +31,7 @@ namespace Tools.EasyPoolKit
PoolClearType ClearType { get; }
bool IfIgnoreTimeScale { get; }
bool IsIgnoreTimeScale { get; }
int GetCachedObjectCount();

2
Assets/Unity-Tools/Core/EasyPool/Core/RecyclablePoolConfig.cs

@ -15,7 +15,7 @@ namespace Tools.EasyPoolKit
public int? MaxDespawnCount = null;
public PoolClearType ClearType = PoolClearType.Default;
public float? AutoClearTime = null;
public bool IfIgnoreTimeScale = false;
public bool IsIgnoreTimeScale = false;
public object[] ExtraArgs = Array.Empty<object>();
}
}

6
Assets/Unity-Tools/Core/EasyPool/Core/RecyclablePoolInfo.cs

@ -14,7 +14,7 @@ namespace Tools.EasyPoolKit
public int? MaxDespawnCount { get; private set; } = null;
public PoolClearType ClearType { get; private set; } = PoolClearType.Default;
public float? AutoClearTime { get; private set; } = null;
public bool IfIgnoreTimeScale { get; private set; } = false;
public bool IsIgnoreTimeScale { get; private set; } = false;
public int CachedObjectCount => _getCachedCount?.Invoke() ?? 0;
@ -49,7 +49,7 @@ namespace Tools.EasyPoolKit
MaxDespawnCount = config.MaxDespawnCount;
ClearType = config.ClearType;
AutoClearTime = config.AutoClearTime;
IfIgnoreTimeScale = config.IfIgnoreTimeScale;
IsIgnoreTimeScale = config.IsIgnoreTimeScale;
_getCachedCount = getCachedCount;
_getUsedCount = getUsedCount;
@ -78,7 +78,7 @@ namespace Tools.EasyPoolKit
.Append("==========").Append(ReferenceType.ToString()).Append('\n')
.Append("AutoClearTime:").Append((AutoClearTime.HasValue ? AutoClearTime.Value.ToString() : "-")).Append('\n')
.Append("==========").Append(ReferenceType.ToString()).Append('\n')
.Append("IfIgnoreTimeScale:").Append(IfIgnoreTimeScale.ToString()).Append('\n');
.Append("IfIgnoreTimeScale:").Append(IsIgnoreTimeScale.ToString()).Append('\n');
return stringBuilder.ToString();
#else

3
Assets/Unity-Tools/Core/EasyPool/Editor.meta

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: ef6366134be2491abe6c53f03aa7f5ca
timeCreated: 1735923167

105
Assets/Unity-Tools/Core/EasyPool/Editor/SimpleGOPoolManagerInspector.cs

@ -0,0 +1,105 @@
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
namespace Tools.EasyPoolKit.Editor
{
[CustomEditor(typeof(SimpleGOPoolKit))]
public class SimpleGOPoolManagerInspector : UnityEditor.Editor
{
private readonly HashSet<string> _poolIdsSet = new HashSet<string>();
public override void OnInspectorGUI()
{
// if (!EditorApplication.isPlaying)
// {
// EditorGUILayout.HelpBox("只在运行时可用。", MessageType.Info);
// return;
// }
//
var poolKit = target as SimpleGOPoolKit;
if (poolKit)
{
EditorGUILayout.LabelField("SimpleGOPoolKit");
var poolsInfo = poolKit.GetPoolsInfo();
EditorGUILayout.LabelField("GameObject Pool Count", poolsInfo.Count.ToString());
foreach (var poolInfo in poolsInfo)
{
DrawGameObjectPool(poolInfo);
}
}
Repaint(); // 每帧都会调用OnInspectorGUI,所以这里的Repaint会导致每帧都会刷新Inspector
}
private void DrawGameObjectPool(RecyclablePoolInfo poolInfo)
{
var isLastOpened = _poolIdsSet.Contains(poolInfo.PoolId);
var isCurOpened = EditorGUILayout.Foldout(isLastOpened, poolInfo.PoolId);
if (isCurOpened != isLastOpened)
{
if (isCurOpened)
{
_poolIdsSet.Add(poolInfo.PoolId);
}
else
{
_poolIdsSet.Remove(poolInfo.PoolId);
}
}
if (isCurOpened)
{
EditorGUILayout.BeginVertical("box");
{
EditorGUILayout.LabelField("PoolId", poolInfo.PoolId);
EditorGUILayout.LabelField("ReferenceType", poolInfo.ReferenceType.ToString());
EditorGUILayout.LabelField("InitCreateCount", poolInfo.InitCreateCount.HasValue ? poolInfo.InitCreateCount.Value.ToString() : "-");
EditorGUILayout.LabelField("ReachMaxLimitType", poolInfo.ReachMaxLimitType.ToString());
if (poolInfo.ReachMaxLimitType != PoolReachMaxLimitType.Default)
{
EditorGUILayout.LabelField("MaxSpawnCount", poolInfo.MaxSpawnCount.HasValue ? poolInfo.MaxSpawnCount.Value.ToString() : "-");
}
EditorGUILayout.LabelField("DespawnDestroyType", poolInfo.DespawnDestroyType.ToString());
if (poolInfo.DespawnDestroyType == PoolDespawnDestroyType.DestroyToLimit)
{
EditorGUILayout.LabelField("MaxDespawnCount", poolInfo.MaxDespawnCount.HasValue ? poolInfo.MaxDespawnCount.Value.ToString() : "-");
}
EditorGUILayout.LabelField("ClearType", poolInfo.ClearType.ToString());
EditorGUILayout.LabelField("AutoClearTime", poolInfo.AutoClearTime.ToString());
EditorGUILayout.LabelField("IfIgnoreTimeScale", poolInfo.IsIgnoreTimeScale.ToString());
EditorGUILayout.LabelField("CachedObjectCount", poolInfo.CachedObjectCount.ToString());
EditorGUILayout.LabelField("UsedObjectCount", poolInfo.UsedObjectCount.ToString());
EditorGUILayout.LabelField("TotalObjectCount", poolInfo.TotalObjectCount.ToString());
if (GUILayout.Button("ClearUnusedObjects(Safe)"))
{
if (poolInfo.ExtraInfo is SimpleGameObjectPool pool)
{
pool.ClearUnusedObjects();
}
}
if (GUILayout.Button("ClearPool(Unsafe)"))
{
if (poolInfo.ExtraInfo is SimpleGameObjectPool pool)
{
pool.ClearAll();
}
}
//TODO Draw all Objects
}
EditorGUILayout.EndVertical();
EditorGUILayout.Separator();
}
}
}
}

3
Assets/Unity-Tools/Core/EasyPool/Editor/SimpleGOPoolManagerInspector.cs.meta

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: ef6bc10cd01946918340eecebc59c854
timeCreated: 1735923179

308
Assets/Unity-Tools/Core/EasyPool/SimpleGOPool/SimpleGOPoolKit.cs

@ -0,0 +1,308 @@
using System;
using System.Collections.Generic;
using NUnit.Framework;
using UnityEngine;
namespace Tools.EasyPoolKit
{
public class SimpleGOPoolKit : MonoBehaviour
{
public static SimpleGOPoolKit Instance
{
get
{
if (_instance == null)
{
var poolRoot = new GameObject("SimpleGOPoolKit");
var cachedRoot = new GameObject("CachedRoot");
cachedRoot.transform.SetParent(poolRoot.transform, false);
cachedRoot.gameObject.SetActive(false);
_instance = poolRoot.AddComponent<SimpleGOPoolKit>();
_instance._cachedRoot = cachedRoot.transform;
DontDestroyOnLoad(_instance.gameObject);
}
return _instance;
}
}
private static SimpleGOPoolKit _instance;
// 缓存根节点
private Transform _cachedRoot;
// key: 预制体的HashID, value: 对应的预制体
private Dictionary<int, GameObject> _prefabTemplates = new Dictionary<int, GameObject>();
// key: 预制体的HashID, value: 对应的对象池
private Dictionary<int, SimpleGameObjectPool> _gameObjPools = new Dictionary<int, SimpleGameObjectPool>();
// key: 激活的物体实例的HashID, value: 对应的预制体的HashID
private Dictionary<int, int> _gameObjRelations = new Dictionary<int, int>();
private List<RecyclablePoolInfo> _poolInfoList = new List<RecyclablePoolInfo>();
public List<RecyclablePoolInfo> GetPoolsInfo() => _poolInfoList;
private bool _ifAppQuit = false;
private void Awake()
{
Debug.Log("Awake");
if (_instance != null)
{
Debug.LogError("EasyPoolKit == 不要绑定SimpleGOPoolKit到任何物体上, 使用SimpleGOPoolKit.Instance!");
Destroy(gameObject);
}
}
private void Update()
{
foreach (var poolPair in _gameObjPools)
{
var pool = poolPair.Value;
var deltaTime = pool.IsIgnoreTimeScale ? Time.unscaledDeltaTime : Time.deltaTime;
pool.OnPoolUpdate(deltaTime);
}
}
private void OnApplicationQuit()
{
_ifAppQuit = true;
}
private void OnDestroy()
{
if (!_ifAppQuit)
{
ClearAllPools(true);
}
}
/// 检测是否已有对应的对象池
public bool IsPoolValid(int prefabHash)
{
return _prefabTemplates.ContainsKey(prefabHash) && _gameObjPools.ContainsKey(prefabHash);
}
public SimpleGameObjectPool RegisterPrefab(GameObject prefabAsset, RecyclablePoolConfig config = null)
{
Assert.IsNotNull(prefabAsset);
var prefabHash = prefabAsset.GetInstanceID();
#if EASY_POOL_DEBUG
if (_gameObjPools.ContainsKey(prefabHash) || _prefabTemplates.ContainsKey(prefabHash))
{
Debug.LogError($"EasyPoolKit == {prefabAsset.name} 已经注册过该预制体了!");
return null;
}
#endif
if (config == null)
{
config = GetSimpleGOPoolConfig(prefabAsset, null);
}
if (config.SpawnFunc == null)
{
config.SpawnFunc = () => DefaultCreateObjectFunc(prefabHash); // 这里只是注册了一个方法,并没有直接执行
}
if (config.ExtraArgs == null || config.ExtraArgs.Length == 0)
{
config.ExtraArgs = new object[] { _cachedRoot };
}
_prefabTemplates[prefabHash] = prefabAsset;
var newPool = new SimpleGameObjectPool(config);
_gameObjPools[prefabHash] = newPool;
_poolInfoList.Add(newPool.GetPoolInfoReadOnly());
return newPool;
}
public bool UnRegisterPrefab(int prefabHash)
{
_prefabTemplates.Remove(prefabHash);
RemoveObjectsRelationByAssetHash(prefabHash);
if (_gameObjPools.TryGetValue(prefabHash, out var pool))
{
pool.ClearAll();
_poolInfoList.Remove(pool.GetPoolInfoReadOnly());
_gameObjPools.Remove(prefabHash);
return true;
}
return false;
}
/// <summary>
/// 简单的生成一个对象
/// <para></para>
/// 使用该方法生成的对象时需要设置手动设置父级,否则无法正常取出对象
/// </summary>
/// <param name="prefabTemplate"></param>
/// <returns></returns>
public GameObject SimpleSpawn(GameObject prefabTemplate)
{
Assert.IsNotNull(prefabTemplate);
var prefabHash = prefabTemplate.GetInstanceID();
if (!_gameObjPools.TryGetValue(prefabHash, out var pool))
{
pool = RegisterPrefab(prefabTemplate);
}
var newObj = pool.SpawnObject();
_gameObjRelations[newObj.GetInstanceID()] = prefabHash;
return newObj;
}
public bool TrySpawn(int prefabHash, out GameObject newObj)
{
newObj = null;
if (_gameObjPools.TryGetValue(prefabHash, out var pool))
{
newObj = pool.SpawnObject();
_gameObjRelations[newObj.GetInstanceID()] = prefabHash;
}
return newObj != null;
}
public bool Despawn(GameObject usedObj)
{
Assert.IsNotNull(usedObj);
var objHash = usedObj.GetInstanceID();
if (!_gameObjRelations.TryGetValue(objHash, out var assetHash))
{
return false;
}
if (!_gameObjPools.TryGetValue(assetHash, out var pool))
{
return false;
}
_gameObjRelations.Remove(objHash);
return pool.DespawnObject(usedObj);
}
public bool ClearPoolByAssetHash(int prefabHash, bool onlyClearUnused = false)
{
if (_gameObjPools.TryGetValue(prefabHash, out var pool))
{
if (onlyClearUnused)
{
pool.ClearUnusedObjects();
return true;
}
else
{
pool.ClearAll();
return true;
}
}
return false;
}
public void ClearAllUnusedObjects()
{
foreach (var poolPair in _gameObjPools)
{
poolPair.Value.ClearUnusedObjects();
}
}
/// <summary>
/// 清空所有对象池
/// </summary>
/// <param name="isDestroy">是否摧毁所有对象池,再次需要使用时将重新注册</param>
public void ClearAllPools(bool isDestroy)
{
foreach (var pool in _gameObjPools)
{
pool.Value.ClearAll();
}
_gameObjRelations.Clear();
if (isDestroy)
{
if (_cachedRoot)
{
for (int i = _cachedRoot.childCount - 1; i >= 0; i--)
{
var child = _cachedRoot.GetChild(i).gameObject;
Destroy(child);
}
}
_prefabTemplates.Clear();
_poolInfoList.Clear();
_gameObjPools.Clear();
}
}
private List<int> _tempRemovedObjectList = new List<int>();
private void RemoveObjectsRelationByAssetHash(int assetHash)
{
foreach (var relation in _gameObjRelations)
{
if (relation.Value == assetHash)
{
_tempRemovedObjectList.Add(relation.Key);
}
}
foreach (var removeItem in _tempRemovedObjectList)
{
_gameObjRelations.Remove(removeItem);
}
_tempRemovedObjectList.Clear();
}
public RecyclablePoolConfig GetSimpleGOPoolConfig(GameObject prefabAsset, Func<GameObject> spawnFunc)
{
Assert.IsNotNull(prefabAsset);
var poolConfig = new RecyclablePoolConfig()
{
ObjectType = RecycleObjectType.GameObject,
ReferenceType = typeof(GameObject),
PoolId = $"SimplePool_{prefabAsset.name}_{prefabAsset.GetInstanceID()}",
SpawnFunc = spawnFunc,
};
return poolConfig;
}
private GameObject DefaultCreateObjectFunc(int prefabHash)
{
// 使用委托注册该本方法时_prefabTemplates不一定不一定含有该prefabHash,只有在真正调用该方法含有对应的prefabHash就OK了
if (_prefabTemplates.TryGetValue(prefabHash, out var prefabAsset))
{
if (prefabAsset != null)
{
var gameObj = Instantiate(prefabAsset);
return gameObj;
}
}
Debug.LogError($"EasyPoolKit == Cannot create object: {prefabHash}");
return null;
}
}
}

3
Assets/Unity-Tools/Core/EasyPool/SimpleGOPool/SimpleGOPoolKit.cs.meta

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 68d17d2d113542f693bc4bc9d81114c7
timeCreated: 1735917282

22
Assets/Unity-Tools/Core/EasyPool/SimpleGOPool/SimpleGameObjectPool.cs

@ -25,7 +25,7 @@ namespace Tools.EasyPoolKit
public PoolReachMaxLimitType ReachMaxLimitType { get; private set; }
public PoolDespawnDestroyType DespawnDestroyType { get; private set; }
public PoolClearType ClearType { get; private set; }
public bool IfIgnoreTimeScale { get; private set; }
public bool IsIgnoreTimeScale { get; private set; }
public int GetCachedObjectCount() => CachedQueue.Count;
public int GetUsedObjectCount() => UsedList.Count;
@ -55,7 +55,7 @@ namespace Tools.EasyPoolKit
MaxSpawnCount = config.MaxSpawnCount;
MaxDespawnCount = config.MaxDespawnCount;
AutoClearTime = config.AutoClearTime;
IfIgnoreTimeScale = config.IfIgnoreTimeScale;
IsIgnoreTimeScale = config.IsIgnoreTimeScale;
PoolInfo = new RecyclablePoolInfo(config, GetCachedObjectCount, GetUsedObjectCount, GetTotalObjectCount, this);
@ -173,14 +173,14 @@ namespace Tools.EasyPoolKit
}
else
{
bool ifReachLimit = false;
bool isReachLimit = false;
if (ReachMaxLimitType != PoolReachMaxLimitType.Default && MaxSpawnCount.HasValue)
{
ifReachLimit = GetTotalObjectCount() >= MaxSpawnCount.Value;
isReachLimit = GetTotalObjectCount() >= MaxSpawnCount.Value;
}
if (!ifReachLimit)
if (!isReachLimit)
{
cachedObj = CreateObject();
}
@ -252,21 +252,21 @@ namespace Tools.EasyPoolKit
Debug.LogError($"EasyPoolKit == 无法回收该物体,该物体并不在使用物体队列中:{usedObj.name}");
}
bool ifReachLimit = false;
bool isReachLimit = false;
if (DespawnDestroyType == PoolDespawnDestroyType.DestroyToLimit)
{
// if (MaxDespawnCount.HasValue && GetCachedObjectCount() > MaxDespawnCount.Value)
if (MaxDespawnCount.HasValue && GetCachedObjectCount() > MaxDespawnCount.Value)
{
ifReachLimit = true;
isReachLimit = true;
}
}
UsedList.Remove(usedNode);
UsedTimeDic.Remove(usedObj.GetInstanceID());
if (ifReachLimit)
if (isReachLimit)
{
DestroyPoolObject(usedObj);
}
@ -338,7 +338,11 @@ namespace Tools.EasyPoolKit
private void PoolClearAll()
{
ClearUnusedObjects();
foreach (var cachedItem in CachedQueue)
{
DestroyPoolObject(cachedItem);
}
CachedQueue.Clear();
while (UsedList.Count > 0)
{

110
Assets/Unity-Tools/Demo/EasyPoolKit/SimpleGOPool/Cube.prefab

@ -0,0 +1,110 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &82165116843846793
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1262207781300642152}
- component: {fileID: 4310159731594785575}
- component: {fileID: 4452916137218812562}
- component: {fileID: 6953180764611318131}
m_Layer: 0
m_Name: Cube
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1262207781300642152
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 82165116843846793}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 2.084, z: 2.399}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &4310159731594785575
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 82165116843846793}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!23 &4452916137218812562
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 82165116843846793}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!65 &6953180764611318131
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 82165116843846793}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Size: {x: 1, y: 1, z: 1}
m_Center: {x: 0, y: 0, z: 0}

7
Assets/Unity-Tools/Demo/EasyPoolKit/SimpleGOPool/Cube.prefab.meta

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: c3da4049b69f3154f9390ac8d19cfcf1
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

77
Assets/Unity-Tools/Demo/EasyPoolKit/SimpleGOPool/Image.prefab

@ -0,0 +1,77 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &676787276947558211
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7097476890679178042}
- component: {fileID: 7801389463094041662}
- component: {fileID: 1024640473808077771}
m_Layer: 5
m_Name: Image
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &7097476890679178042
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 676787276947558211}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 91.5, y: -25}
m_SizeDelta: {x: 183, y: 50}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &7801389463094041662
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 676787276947558211}
m_CullTransparentMesh: 1
--- !u!114 &1024640473808077771
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 676787276947558211}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1

7
Assets/Unity-Tools/Demo/EasyPoolKit/SimpleGOPool/Image.prefab.meta

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 770926bef9745f9468d76286c104ffbd
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

779
Assets/Unity-Tools/Demo/EasyPoolKit/SimpleGOPool/SimpleGOPool.unity

@ -130,6 +130,7 @@ GameObject:
- component: {fileID: 65465575}
- component: {fileID: 65465574}
- component: {fileID: 65465573}
- component: {fileID: 65465576}
m_Layer: 0
m_Name: Main Camera
m_TagString: MainCamera
@ -211,6 +212,50 @@ Transform:
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &65465576
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 65465572}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3}
m_Name:
m_EditorClassIdentifier:
m_RenderShadows: 1
m_RequiresDepthTextureOption: 2
m_RequiresOpaqueTextureOption: 2
m_CameraType: 0
m_Cameras: []
m_RendererIndex: -1
m_VolumeLayerMask:
serializedVersion: 2
m_Bits: 1
m_VolumeTrigger: {fileID: 0}
m_VolumeFrameworkUpdateModeOption: 2
m_RenderPostProcessing: 0
m_Antialiasing: 0
m_AntialiasingQuality: 2
m_StopNaN: 0
m_Dithering: 0
m_ClearDepth: 1
m_AllowXRRendering: 1
m_AllowHDROutput: 1
m_UseScreenCoordOverride: 0
m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0}
m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0}
m_RequiresDepthTexture: 0
m_RequiresColorTexture: 0
m_Version: 2
m_TaaSettings:
m_Quality: 3
m_FrameInfluence: 0.1
m_JitterScale: 1
m_MipBias: 0
m_VarianceClampScale: 0.9
m_ContrastAdaptiveSharpening: 0
--- !u!1 &79651670
GameObject:
m_ObjectHideFlags: 0
@ -332,6 +377,458 @@ MonoBehaviour:
m_LightCookieSize: {x: 1, y: 1}
m_LightCookieOffset: {x: 0, y: 0}
m_SoftShadowQuality: 0
--- !u!1 &330912624
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 330912625}
- component: {fileID: 330912628}
- component: {fileID: 330912627}
- component: {fileID: 330912626}
m_Layer: 5
m_Name: Viewport
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &330912625
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 330912624}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 1878731560}
m_Father: {fileID: 1366901895}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: -17, y: 0}
m_Pivot: {x: 0, y: 1}
--- !u!114 &330912626
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 330912624}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3}
m_Name:
m_EditorClassIdentifier:
m_ShowMaskGraphic: 0
--- !u!114 &330912627
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 330912624}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 10917, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!222 &330912628
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 330912624}
m_CullTransparentMesh: 1
--- !u!1 &404696245
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 404696246}
- component: {fileID: 404696248}
- component: {fileID: 404696247}
m_Layer: 5
m_Name: Handle
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &404696246
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 404696245}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1987258637}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 20, y: 20}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &404696247
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 404696245}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!222 &404696248
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 404696245}
m_CullTransparentMesh: 1
--- !u!1 &1366901894
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1366901895}
- component: {fileID: 1366901898}
- component: {fileID: 1366901897}
- component: {fileID: 1366901896}
m_Layer: 5
m_Name: Scroll View
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1366901895
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1366901894}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 330912625}
- {fileID: 1942527436}
m_Father: {fileID: 1397674205}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 17, y: 178}
m_SizeDelta: {x: 200, y: 200}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &1366901896
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1366901894}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Content: {fileID: 1878731560}
m_Horizontal: 0
m_Vertical: 1
m_MovementType: 1
m_Elasticity: 0.1
m_Inertia: 1
m_DecelerationRate: 0.135
m_ScrollSensitivity: 1
m_Viewport: {fileID: 330912625}
m_HorizontalScrollbar: {fileID: 0}
m_VerticalScrollbar: {fileID: 1942527437}
m_HorizontalScrollbarVisibility: 2
m_VerticalScrollbarVisibility: 0
m_HorizontalScrollbarSpacing: -3
m_VerticalScrollbarSpacing: -3
m_OnValueChanged:
m_PersistentCalls:
m_Calls: []
--- !u!114 &1366901897
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1366901894}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 0.392}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!222 &1366901898
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1366901894}
m_CullTransparentMesh: 1
--- !u!1 &1397674201
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1397674205}
- component: {fileID: 1397674204}
- component: {fileID: 1397674203}
- component: {fileID: 1397674202}
m_Layer: 5
m_Name: Canvas
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &1397674202
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1397674201}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
m_Name:
m_EditorClassIdentifier:
m_IgnoreReversedGraphics: 1
m_BlockingObjects: 0
m_BlockingMask:
serializedVersion: 2
m_Bits: 55
--- !u!114 &1397674203
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1397674201}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
m_Name:
m_EditorClassIdentifier:
m_UiScaleMode: 0
m_ReferencePixelsPerUnit: 100
m_ScaleFactor: 1
m_ReferenceResolution: {x: 800, y: 600}
m_ScreenMatchMode: 0
m_MatchWidthOrHeight: 0
m_PhysicalUnit: 3
m_FallbackScreenDPI: 96
m_DefaultSpriteDPI: 96
m_DynamicPixelsPerUnit: 1
m_PresetInfoIsWorld: 0
--- !u!223 &1397674204
Canvas:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1397674201}
m_Enabled: 1
serializedVersion: 3
m_RenderMode: 0
m_Camera: {fileID: 0}
m_PlaneDistance: 100
m_PixelPerfect: 0
m_ReceivesEvents: 1
m_OverrideSorting: 0
m_OverridePixelPerfect: 0
m_SortingBucketNormalizedSize: 0
m_VertexColorAlwaysGammaSpace: 0
m_AdditionalShaderChannelsFlag: 0
m_UpdateRectTransformForStandalone: 0
m_SortingLayerID: 0
m_SortingOrder: 0
m_TargetDisplay: 0
--- !u!224 &1397674205
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1397674201}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0, y: 0, z: 0}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 1366901895}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0, y: 0}
--- !u!1 &1878731559
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1878731560}
- component: {fileID: 1878731561}
- component: {fileID: 1878731562}
m_Layer: 5
m_Name: Content
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1878731560
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1878731559}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 330912625}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0, y: 1}
--- !u!114 &1878731561
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1878731559}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
m_Name:
m_EditorClassIdentifier:
m_HorizontalFit: 0
m_VerticalFit: 1
--- !u!114 &1878731562
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1878731559}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Padding:
m_Left: 0
m_Right: 0
m_Top: 0
m_Bottom: 0
m_ChildAlignment: 0
m_Spacing: 0
m_ChildForceExpandWidth: 1
m_ChildForceExpandHeight: 1
m_ChildControlWidth: 1
m_ChildControlHeight: 0
m_ChildScaleWidth: 0
m_ChildScaleHeight: 0
m_ReverseArrangement: 0
--- !u!1 &1887936863
GameObject:
m_ObjectHideFlags: 0
@ -376,8 +873,12 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: c53679ae49565704d8a17892b9bbc378, type: 3}
m_Name:
m_EditorClassIdentifier:
prefab: {fileID: 2037916656}
--- !u!1 &2037916656
cubePrefab: {fileID: 82165116843846793, guid: c3da4049b69f3154f9390ac8d19cfcf1, type: 3}
cubes: []
imagePrefab: {fileID: 676787276947558211, guid: 770926bef9745f9468d76286c104ffbd, type: 3}
parent: {fileID: 1878731560}
images: []
--- !u!1 &1942527435
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@ -385,101 +886,234 @@ GameObject:
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2037916660}
- component: {fileID: 2037916659}
- component: {fileID: 2037916658}
- component: {fileID: 2037916657}
m_Layer: 0
m_Name: Cube
- component: {fileID: 1942527436}
- component: {fileID: 1942527439}
- component: {fileID: 1942527438}
- component: {fileID: 1942527437}
m_Layer: 5
m_Name: Scrollbar Vertical
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!65 &2037916657
BoxCollider:
--- !u!224 &1942527436
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2037916656}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_GameObject: {fileID: 1942527435}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 1987258637}
m_Father: {fileID: 1366901895}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 1, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 20, y: 0}
m_Pivot: {x: 1, y: 1}
--- !u!114 &1942527437
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1942527435}
m_Enabled: 1
serializedVersion: 3
m_Size: {x: 1, y: 1, z: 1}
m_Center: {x: 0, y: 0, z: 0}
--- !u!23 &2037916658
MeshRenderer:
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Navigation:
m_Mode: 3
m_WrapAround: 0
m_SelectOnUp: {fileID: 0}
m_SelectOnDown: {fileID: 0}
m_SelectOnLeft: {fileID: 0}
m_SelectOnRight: {fileID: 0}
m_Transition: 1
m_Colors:
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
m_ColorMultiplier: 1
m_FadeDuration: 0.1
m_SpriteState:
m_HighlightedSprite: {fileID: 0}
m_PressedSprite: {fileID: 0}
m_SelectedSprite: {fileID: 0}
m_DisabledSprite: {fileID: 0}
m_AnimationTriggers:
m_NormalTrigger: Normal
m_HighlightedTrigger: Highlighted
m_PressedTrigger: Pressed
m_SelectedTrigger: Selected
m_DisabledTrigger: Disabled
m_Interactable: 1
m_TargetGraphic: {fileID: 404696247}
m_HandleRect: {fileID: 404696246}
m_Direction: 2
m_Value: 0
m_Size: 1
m_NumberOfSteps: 0
m_OnValueChanged:
m_PersistentCalls:
m_Calls: []
--- !u!114 &1942527438
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2037916656}
m_GameObject: {fileID: 1942527435}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &2037916659
MeshFilter:
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!222 &1942527439
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1942527435}
m_CullTransparentMesh: 1
--- !u!1 &1987258636
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2037916656}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!4 &2037916660
serializedVersion: 6
m_Component:
- component: {fileID: 1987258637}
m_Layer: 5
m_Name: Sliding Area
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1987258637
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1987258636}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 404696246}
m_Father: {fileID: 1942527436}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: -20, y: -20}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!1 &1994288141
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1994288144}
- component: {fileID: 1994288143}
- component: {fileID: 1994288142}
m_Layer: 0
m_Name: EventSystem
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &1994288142
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1994288141}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 01614664b831546d2ae94a42149d80ac, type: 3}
m_Name:
m_EditorClassIdentifier:
m_SendPointerHoverToParent: 1
m_MoveRepeatDelay: 0.5
m_MoveRepeatRate: 0.1
m_XRTrackingOrigin: {fileID: 0}
m_ActionsAsset: {fileID: -944628639613478452, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_PointAction: {fileID: -1654692200621890270, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_MoveAction: {fileID: -8784545083839296357, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_SubmitAction: {fileID: 392368643174621059, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_CancelAction: {fileID: 7727032971491509709, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_LeftClickAction: {fileID: 3001919216989983466, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_MiddleClickAction: {fileID: -2185481485913320682, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_RightClickAction: {fileID: -4090225696740746782, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_ScrollWheelAction: {fileID: 6240969308177333660, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_TrackedDevicePositionAction: {fileID: 6564999863303420839, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_TrackedDeviceOrientationAction: {fileID: 7970375526676320489, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
m_DeselectOnBackgroundClick: 1
m_PointerBehavior: 0
m_CursorLockBehavior: 0
m_ScrollDeltaPerTick: 6
--- !u!114 &1994288143
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1994288141}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3}
m_Name:
m_EditorClassIdentifier:
m_FirstSelected: {fileID: 0}
m_sendNavigationEvents: 1
m_DragThreshold: 10
--- !u!4 &1994288144
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2037916656}
m_GameObject: {fileID: 1994288141}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 2.084, z: 2.399}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
@ -492,4 +1126,5 @@ SceneRoots:
- {fileID: 65465575}
- {fileID: 79651672}
- {fileID: 1887936864}
- {fileID: 2037916660}
- {fileID: 1397674205}
- {fileID: 1994288144}

54
Assets/Unity-Tools/Demo/EasyPoolKit/SimpleGOPool/SimpleGOPoolManager.cs

@ -1,18 +1,56 @@
using System.Collections.Generic;
using Sirenix.OdinInspector;
using UnityEngine;
namespace Tools.EasyPoolKit.Demo
{
public class SimpleGOPoolManager : MonoBehaviour
{
public GameObject prefab;
private void Start()
public GameObject cubePrefab;
[ReadOnly] public List<GameObject> cubes = new List<GameObject>();
[Space]
public GameObject imagePrefab;
public Transform parent;
[ReadOnly] public List<GameObject> images = new List<GameObject>();
private void Update()
{
var config = new RecyclablePoolConfig();
config.SpawnFunc = () => Instantiate(prefab);
config.ObjectType = RecycleObjectType.GameObject;
config.ExtraArgs = new object[] { transform };
config.InitCreateCount = 5;
var pool = new SimpleGameObjectPool(config);
if (Input.GetKeyDown(KeyCode.A))
{
var newImage = SimpleGOPoolKit.Instance.SimpleSpawn(imagePrefab);
newImage.transform.SetParent(parent);
images.Add(newImage);
}
else if (Input.GetKeyDown(KeyCode.S))
{
if (images.Count > 0)
{
var lastImage = images[^1];
SimpleGOPoolKit.Instance.Despawn(lastImage);
images.RemoveAt(images.Count - 1);
}
}
else if (Input.GetKeyDown(KeyCode.C))
{
SimpleGOPoolKit.Instance.ClearAllPools(true);
}
else if (Input.GetKeyDown(KeyCode.Alpha1))
{
var newImage = SimpleGOPoolKit.Instance.SimpleSpawn(cubePrefab);
newImage.transform.SetParent(null);
cubes.Add(newImage);
}
else if (Input.GetKeyDown(KeyCode.Alpha2))
{
if (cubes.Count > 0)
{
var lastCube = cubes[^1];
SimpleGOPoolKit.Instance.Despawn(lastCube);
cubes.RemoveAt(cubes.Count - 1);
}
}
}
}
}

Loading…
Cancel
Save