浏览代码

Merge remote-tracking branch 'upstream/main' into main

/main
kgc00 4 年前
当前提交
e1c42620
共有 41 个文件被更改,包括 2035 次插入0 次删除
  1. 2
      UOP1_Project/.gitignore
  2. 33
      UOP1_Project/Assets/LocalPoolTester.cs
  3. 11
      UOP1_Project/Assets/LocalPoolTester.cs.meta
  4. 8
      UOP1_Project/Assets/Scripts/Factory.meta
  5. 8
      UOP1_Project/Assets/Scripts/Pool.meta
  6. 11
      UOP1_Project/Assets/Scripts/Factory/ComponentFactorySO.cs.meta
  7. 16
      UOP1_Project/Assets/Scripts/Factory/FactorySO.cs
  8. 11
      UOP1_Project/Assets/Scripts/Factory/FactorySO.cs.meta
  9. 11
      UOP1_Project/Assets/Scripts/Factory/IFactory.cs.meta
  10. 22
      UOP1_Project/Assets/Scripts/Factory/ComponentFactorySO.cs
  11. 11
      UOP1_Project/Assets/Scripts/Factory/IFactory.cs
  12. 59
      UOP1_Project/Assets/Scripts/Pool/ComponentPool.cs
  13. 11
      UOP1_Project/Assets/Scripts/Pool/ComponentPool.cs.meta
  14. 8
      UOP1_Project/Assets/Scripts/Pool/Example.meta
  15. 12
      UOP1_Project/Assets/Scripts/Pool/IPool.cs
  16. 11
      UOP1_Project/Assets/Scripts/Pool/IPool.cs.meta
  17. 11
      UOP1_Project/Assets/Scripts/Pool/IPoolable.cs.meta
  18. 59
      UOP1_Project/Assets/Scripts/Pool/PoolSO.cs
  19. 11
      UOP1_Project/Assets/Scripts/Pool/PoolSO.cs.meta
  20. 8
      UOP1_Project/Assets/Scripts/Pool/Example/Assets.meta
  21. 464
      UOP1_Project/Assets/Scripts/Pool/Example/Assets/Example.unity
  22. 7
      UOP1_Project/Assets/Scripts/Pool/Example/Assets/Example.unity.meta
  23. 16
      UOP1_Project/Assets/Scripts/Pool/Example/Assets/ParticleFactory.asset
  24. 8
      UOP1_Project/Assets/Scripts/Pool/Example/Assets/ParticleFactory.asset.meta
  25. 1001
      UOP1_Project/Assets/Scripts/Pool/Example/Assets/Particles.prefab
  26. 7
      UOP1_Project/Assets/Scripts/Pool/Example/Assets/Particles.prefab.meta
  27. 16
      UOP1_Project/Assets/Scripts/Pool/Example/Assets/Shared GlobalParticlePool.asset
  28. 8
      UOP1_Project/Assets/Scripts/Pool/Example/Assets/Shared GlobalParticlePool.asset.meta
  29. 11
      UOP1_Project/Assets/Scripts/Pool/Example/ParticleFactorySO.cs.meta
  30. 37
      UOP1_Project/Assets/Scripts/Pool/Example/ParticlePoolSO.cs
  31. 11
      UOP1_Project/Assets/Scripts/Pool/Example/ParticlePoolSO.cs.meta
  32. 11
      UOP1_Project/Assets/Scripts/Pool/Example/PoolTester.cs.meta
  33. 37
      UOP1_Project/Assets/Scripts/Pool/Example/PoolableParticle.cs
  34. 11
      UOP1_Project/Assets/Scripts/Pool/Example/PoolableParticle.cs.meta
  35. 22
      UOP1_Project/Assets/Scripts/Pool/Example/ParticleFactorySO.cs
  36. 21
      UOP1_Project/Assets/Scripts/Pool/Example/PoolTester.cs
  37. 13
      UOP1_Project/Assets/Scripts/Pool/IPoolable.cs

2
UOP1_Project/.gitignore


# Crashlytics generated file
crashlytics-build.properties
# Individual Package settings that can safely be ignored
ProjectSettings/Packages/com.unity.probuilder/Settings.json

33
UOP1_Project/Assets/LocalPoolTester.cs


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LocalPoolTester : MonoBehaviour
{
[SerializeField]
private PoolableParticle _prefab = default;
[SerializeField]
private int _initialPoolSize = 5;
private ParticlePoolSO _pool;
private ParticleFactorySO _factory;
private IEnumerator Start()
{
_factory = ScriptableObject.CreateInstance<ParticleFactorySO>();
_factory.Prefab = _prefab;
_pool = ScriptableObject.CreateInstance<ParticlePoolSO>();
_pool.name = gameObject.name;
_pool.Factory = _factory;
_pool.InitialPoolSize = _initialPoolSize;
List<PoolableParticle> particles = _pool.Request(10) as List<PoolableParticle>;
foreach (PoolableParticle particle in particles)
{
particle.transform.position = Random.insideUnitSphere * 5f;
particle.Play();
}
yield return new WaitForSecondsRealtime(5f);
_pool.Return(particles);
}
}

11
UOP1_Project/Assets/LocalPoolTester.cs.meta


fileFormatVersion: 2
guid: ff0fb790d778a05429eca3a001ab6be1
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

8
UOP1_Project/Assets/Scripts/Factory.meta


fileFormatVersion: 2
guid: 89f8a7242ed47df46b9536d718743192
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

8
UOP1_Project/Assets/Scripts/Pool.meta


fileFormatVersion: 2
guid: e62282de61949e443adb64fc8c9892e6
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

11
UOP1_Project/Assets/Scripts/Factory/ComponentFactorySO.cs.meta


fileFormatVersion: 2
guid: 1d5f471b49fdf1c43a84a8deeedc5183
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

16
UOP1_Project/Assets/Scripts/Factory/FactorySO.cs


using UnityEngine;
namespace UOP1.Factory
{
/// <summary>
/// Implements the IFactory interface for non-abstract types.
/// </summary>
/// <typeparam name="T">Specifies the non-abstract type to create.</typeparam>
public abstract class FactorySO<T> : ScriptableObject, IFactory<T> where T : new()
{
public virtual T Create()
{
return new T();
}
}
}

11
UOP1_Project/Assets/Scripts/Factory/FactorySO.cs.meta


fileFormatVersion: 2
guid: dd765064f0956cc4d9fb91bb4c0e43ea
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

11
UOP1_Project/Assets/Scripts/Factory/IFactory.cs.meta


fileFormatVersion: 2
guid: 8f48ef472d47ea948bd7440ec57cd265
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

22
UOP1_Project/Assets/Scripts/Factory/ComponentFactorySO.cs


using UnityEngine;
namespace UOP1.Factory
{
/// <summary>
/// Implements the IFactory interface for Component types.
/// </summary>
/// <typeparam name="T">Specifies the component to create.</typeparam>
public abstract class ComponentFactorySO<T> : ScriptableObject, IFactory<T> where T : Component
{
public abstract T Prefab
{
get;
set;
}
public virtual T Create()
{
return Instantiate(Prefab);
}
}
}

11
UOP1_Project/Assets/Scripts/Factory/IFactory.cs


namespace UOP1.Factory
{
/// <summary>
/// Represents a factory.
/// </summary>
/// <typeparam name="T">Specifies the type to create.</typeparam>
public interface IFactory<T>
{
T Create();
}
}

59
UOP1_Project/Assets/Scripts/Pool/ComponentPool.cs


using UnityEngine;
namespace UOP1.Pool
{
/// <summary>
/// Implements a Pool for Component types.
/// </summary>
/// <typeparam name="T">Specifies the component to pool.</typeparam>
public abstract class ComponentPool<T> : PoolSO<T> where T : Component, IPoolable
{
public abstract int InitialPoolSize { get; set; }
private GameObject _poolRootObject;
private void InitializePool()
{
_poolRootObject = new GameObject(name);
DontDestroyOnLoad(_poolRootObject);
for (int i = 0; i < InitialPoolSize; i++)
{
_available.Push(Create());
}
}
public override T Request()
{
if (_poolRootObject == null)
{
InitializePool();
}
return base.Request();
}
public override void Return(T member)
{
if (_poolRootObject == null)
{
InitializePool();
}
base.Return(member);
}
protected override T Create()
{
T newMember = base.Create();
newMember.transform.SetParent(_poolRootObject.transform);
return newMember;
}
public override void OnDisable()
{
base.OnDisable();
#if UNITY_EDITOR
DestroyImmediate(_poolRootObject);
#else
Destroy(_poolRootObject);
#endif
}
}
}

11
UOP1_Project/Assets/Scripts/Pool/ComponentPool.cs.meta


fileFormatVersion: 2
guid: cf67ce39a704c6842aa23316769815b9
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

8
UOP1_Project/Assets/Scripts/Pool/Example.meta


fileFormatVersion: 2
guid: 8725c4e580619da4d8dcac9c7fc2369f
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

12
UOP1_Project/Assets/Scripts/Pool/IPool.cs


namespace UOP1.Pool
{
/// <summary>
/// Represents a collection that pools objects of T.
/// </summary>
/// <typeparam name="T">Specifies the type of elements in the pool.</typeparam>
public interface IPool<T>
{
T Request();
void Return(T member);
}
}

11
UOP1_Project/Assets/Scripts/Pool/IPool.cs.meta


fileFormatVersion: 2
guid: 4f29f50d49951f94ca40d8027f7939d8
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

11
UOP1_Project/Assets/Scripts/Pool/IPoolable.cs.meta


fileFormatVersion: 2
guid: 936084c4c3e4d6848bfa61084af46c1c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

59
UOP1_Project/Assets/Scripts/Pool/PoolSO.cs


using UOP1.Factory;
using System.Collections.Generic;
using UnityEngine;
namespace UOP1.Pool
{
/// <summary>
/// A generic pool that generates members of type T on-demand via a factory.
/// </summary>
/// <typeparam name="T">Specifies the type of elements to pool.</typeparam>
public abstract class PoolSO<T> : ScriptableObject, IPool<T> where T : IPoolable
{
protected readonly Stack<T> _available = new Stack<T>();
public abstract IFactory<T> Factory { get; set; }
protected virtual T Create()
{
return Factory.Create();
}
public virtual T Request()
{
T member = _available.Count > 0 ? _available.Pop() : Create();
member.OnRequest();
return member;
}
public virtual IEnumerable<T> Request(int num = 1)
{
List<T> members = new List<T>(num);
for (int i = 0; i < num; i++)
{
members.Add(Request());
}
return members;
}
public virtual void Return(T member)
{
member.OnReturn(() =>
{
_available.Push(member);
});
}
public virtual void Return(IEnumerable<T> members)
{
foreach (T member in members)
{
Return(member);
}
}
public virtual void OnDisable()
{
_available.Clear();
}
}
}

11
UOP1_Project/Assets/Scripts/Pool/PoolSO.cs.meta


fileFormatVersion: 2
guid: ddc7640d2e7701641b7bc7efe3c8a744
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

8
UOP1_Project/Assets/Scripts/Pool/Example/Assets.meta


fileFormatVersion: 2
guid: 0b6e60a80f970744aab92189658ae2db
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

464
UOP1_Project/Assets/Scripts/Pool/Example/Assets/Example.unity


%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!29 &1
OcclusionCullingSettings:
m_ObjectHideFlags: 0
serializedVersion: 2
m_OcclusionBakeSettings:
smallestOccluder: 5
smallestHole: 0.25
backfaceThreshold: 100
m_SceneGUID: 00000000000000000000000000000000
m_OcclusionCullingData: {fileID: 0}
--- !u!104 &2
RenderSettings:
m_ObjectHideFlags: 0
serializedVersion: 9
m_Fog: 0
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
m_FogMode: 3
m_FogDensity: 0.01
m_LinearFogStart: 0
m_LinearFogEnd: 300
m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
m_AmbientIntensity: 1
m_AmbientMode: 0
m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
m_HaloStrength: 0.5
m_FlareStrength: 1
m_FlareFadeSpeed: 3
m_HaloTexture: {fileID: 0}
m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
m_DefaultReflectionMode: 0
m_DefaultReflectionResolution: 128
m_ReflectionBounces: 1
m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0}
m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1}
m_UseRadianceAmbientProbe: 0
--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0
serializedVersion: 11
m_GIWorkflowMode: 1
m_GISettings:
serializedVersion: 2
m_BounceScale: 1
m_IndirectOutputScale: 1
m_AlbedoBoost: 1
m_EnvironmentLightingMode: 0
m_EnableBakedLightmaps: 1
m_EnableRealtimeLightmaps: 0
m_LightmapEditorSettings:
serializedVersion: 12
m_Resolution: 2
m_BakeResolution: 40
m_AtlasSize: 1024
m_AO: 0
m_AOMaxDistance: 1
m_CompAOExponent: 1
m_CompAOExponentDirect: 0
m_ExtractAmbientOcclusion: 0
m_Padding: 2
m_LightmapParameters: {fileID: 0}
m_LightmapsBakeMode: 1
m_TextureCompression: 1
m_FinalGather: 0
m_FinalGatherFiltering: 1
m_FinalGatherRayCount: 256
m_ReflectionCompression: 2
m_MixedBakeMode: 2
m_BakeBackend: 1
m_PVRSampling: 1
m_PVRDirectSampleCount: 32
m_PVRSampleCount: 512
m_PVRBounces: 2
m_PVREnvironmentSampleCount: 256
m_PVREnvironmentReferencePointCount: 2048
m_PVRFilteringMode: 1
m_PVRDenoiserTypeDirect: 1
m_PVRDenoiserTypeIndirect: 1
m_PVRDenoiserTypeAO: 1
m_PVRFilterTypeDirect: 0
m_PVRFilterTypeIndirect: 0
m_PVRFilterTypeAO: 0
m_PVREnvironmentMIS: 1
m_PVRCulling: 1
m_PVRFilteringGaussRadiusDirect: 1
m_PVRFilteringGaussRadiusIndirect: 5
m_PVRFilteringGaussRadiusAO: 2
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
m_PVRFilteringAtrousPositionSigmaIndirect: 2
m_PVRFilteringAtrousPositionSigmaAO: 1
m_ExportTrainingData: 0
m_TrainingDataDestination: TrainingData
m_LightProbeSampleCountMultiplier: 4
m_LightingDataAsset: {fileID: 0}
m_UseShadowmask: 1
--- !u!196 &4
NavMeshSettings:
serializedVersion: 2
m_ObjectHideFlags: 0
m_BuildSettings:
serializedVersion: 2
agentTypeID: 0
agentRadius: 0.5
agentHeight: 2
agentSlope: 45
agentClimb: 0.4
ledgeDropHeight: 0
maxJumpAcrossDistance: 0
minRegionArea: 2
manualCellSize: 0
cellSize: 0.16666667
manualTileSize: 0
tileSize: 256
accuratePlacement: 0
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!1 &257078474
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 257078476}
- component: {fileID: 257078475}
m_Layer: 0
m_Name: PoolTester
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &257078475
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 257078474}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 47b003fc4c0c7f94fb3630ba713073aa, type: 3}
m_Name:
m_EditorClassIdentifier:
_pool: {fileID: 11400000, guid: 73e856d683fe4d44aa05fc3a5fe882c0, type: 2}
--- !u!4 &257078476
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 257078474}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0.014519863, y: -2.6415513, z: -2.9726562}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &457623035
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 457623037}
- component: {fileID: 457623036}
m_Layer: 0
m_Name: Directional Light
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!108 &457623036
Light:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 457623035}
m_Enabled: 1
serializedVersion: 10
m_Type: 1
m_Shape: 0
m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
m_Intensity: 1
m_Range: 10
m_SpotAngle: 30
m_InnerSpotAngle: 21.80208
m_CookieSize: 10
m_Shadows:
m_Type: 2
m_Resolution: -1
m_CustomResolution: -1
m_Strength: 1
m_Bias: 0.05
m_NormalBias: 0.4
m_NearPlane: 0.2
m_CullingMatrixOverride:
e00: 1
e01: 0
e02: 0
e03: 0
e10: 0
e11: 1
e12: 0
e13: 0
e20: 0
e21: 0
e22: 1
e23: 0
e30: 0
e31: 0
e32: 0
e33: 1
m_UseCullingMatrixOverride: 0
m_Cookie: {fileID: 0}
m_DrawHalo: 0
m_Flare: {fileID: 0}
m_RenderMode: 0
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingLayerMask: 1
m_Lightmapping: 4
m_LightShadowCasterMode: 0
m_AreaSize: {x: 1, y: 1}
m_BounceIntensity: 1
m_ColorTemperature: 6570
m_UseColorTemperature: 0
m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
m_UseBoundingSphereOverride: 0
m_ShadowRadius: 0
m_ShadowAngle: 0
--- !u!4 &457623037
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 457623035}
m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
m_LocalPosition: {x: 0, y: 3, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
--- !u!1 &648587141
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 648587143}
- component: {fileID: 648587142}
m_Layer: 0
m_Name: LocalPoolTester
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &648587142
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 648587141}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: ff0fb790d778a05429eca3a001ab6be1, type: 3}
m_Name:
m_EditorClassIdentifier:
_prefab: {fileID: -6757246126632128155, guid: 13e8a2294914b7744a0b9fe47b807ead,
type: 3}
_initialPoolSize: 5
--- !u!4 &648587143
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 648587141}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0.014519863, y: -2.6415513, z: -2.9726562}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1164917333
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1164917338}
- component: {fileID: 1164917337}
- component: {fileID: 1164917336}
- component: {fileID: 1164917335}
m_Layer: 0
m_Name: Main Camera
m_TagString: MainCamera
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &1164917335
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1164917333}
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_RenderPostProcessing: 0
m_Antialiasing: 0
m_AntialiasingQuality: 2
m_StopNaN: 0
m_Dithering: 0
m_ClearDepth: 1
m_RequiresDepthTexture: 0
m_RequiresColorTexture: 0
m_Version: 2
--- !u!81 &1164917336
AudioListener:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1164917333}
m_Enabled: 1
--- !u!20 &1164917337
Camera:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1164917333}
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 1
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
m_projectionMatrixMode: 1
m_GateFitMode: 2
m_FOVAxisMode: 0
m_SensorSize: {x: 36, y: 24}
m_LensShift: {x: 0, y: 0}
m_FocalLength: 50
m_NormalizedViewPortRect:
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
near clip plane: 0.3
far clip plane: 1000
field of view: 60
orthographic: 0
orthographic size: 5
m_Depth: -1
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingPath: -1
m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0
m_TargetEye: 3
m_HDR: 1
m_AllowMSAA: 1
m_AllowDynamicResolution: 0
m_ForceIntoRT: 0
m_OcclusionCulling: 1
m_StereoConvergence: 10
m_StereoSeparation: 0.022
--- !u!4 &1164917338
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1164917333}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 1, z: -10}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &2125951696
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2125951698}
- component: {fileID: 2125951697}
m_Layer: 0
m_Name: PoolTester
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &2125951697
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2125951696}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 47b003fc4c0c7f94fb3630ba713073aa, type: 3}
m_Name:
m_EditorClassIdentifier:
_pool: {fileID: 11400000, guid: 73e856d683fe4d44aa05fc3a5fe882c0, type: 2}
--- !u!4 &2125951698
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2125951696}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0.014519863, y: -2.6415513, z: -2.9726562}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}

7
UOP1_Project/Assets/Scripts/Pool/Example/Assets/Example.unity.meta


fileFormatVersion: 2
guid: 7b66255e732c611449707befad58a236
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

16
UOP1_Project/Assets/Scripts/Pool/Example/Assets/ParticleFactory.asset


%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 2db2fc8ea575dfd4e927bf2c91d75b5c, type: 3}
m_Name: ParticleFactory
m_EditorClassIdentifier:
_prefab: {fileID: -6757246126632128155, guid: 13e8a2294914b7744a0b9fe47b807ead,
type: 3}

8
UOP1_Project/Assets/Scripts/Pool/Example/Assets/ParticleFactory.asset.meta


fileFormatVersion: 2
guid: ca185e564147672458eeabb1f9080925
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 0
userData:
assetBundleName:
assetBundleVariant:

1001
UOP1_Project/Assets/Scripts/Pool/Example/Assets/Particles.prefab
文件差异内容过多而无法显示
查看文件

7
UOP1_Project/Assets/Scripts/Pool/Example/Assets/Particles.prefab.meta


fileFormatVersion: 2
guid: 13e8a2294914b7744a0b9fe47b807ead
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

16
UOP1_Project/Assets/Scripts/Pool/Example/Assets/Shared GlobalParticlePool.asset


%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 485377a59a3f4fc4b9618f557ab57b6f, type: 3}
m_Name: Shared GlobalParticlePool
m_EditorClassIdentifier:
_factory: {fileID: 11400000, guid: ca185e564147672458eeabb1f9080925, type: 2}
_initialPoolSize: 5

8
UOP1_Project/Assets/Scripts/Pool/Example/Assets/Shared GlobalParticlePool.asset.meta


fileFormatVersion: 2
guid: 73e856d683fe4d44aa05fc3a5fe882c0
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 0
userData:
assetBundleName:
assetBundleVariant:

11
UOP1_Project/Assets/Scripts/Pool/Example/ParticleFactorySO.cs.meta


fileFormatVersion: 2
guid: 2db2fc8ea575dfd4e927bf2c91d75b5c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

37
UOP1_Project/Assets/Scripts/Pool/Example/ParticlePoolSO.cs


using UnityEngine;
using UOP1.Pool;
using UOP1.Factory;
[CreateAssetMenu(fileName = "NewParticlePool", menuName = "Pool/Particle Pool")]
public class ParticlePoolSO : ComponentPool<PoolableParticle>
{
[SerializeField]
private ParticleFactorySO _factory;
[SerializeField]
private int _initialPoolSize;
public override IFactory<PoolableParticle> Factory
{
get
{
return _factory;
}
set
{
_factory = value as ParticleFactorySO;
}
}
public override int InitialPoolSize
{
get
{
return _initialPoolSize;
}
set
{
_initialPoolSize = value;
}
}
}

11
UOP1_Project/Assets/Scripts/Pool/Example/ParticlePoolSO.cs.meta


fileFormatVersion: 2
guid: 485377a59a3f4fc4b9618f557ab57b6f
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

11
UOP1_Project/Assets/Scripts/Pool/Example/PoolTester.cs.meta


fileFormatVersion: 2
guid: 47b003fc4c0c7f94fb3630ba713073aa
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

37
UOP1_Project/Assets/Scripts/Pool/Example/PoolableParticle.cs


using UOP1.Pool;
using System;
using System.Collections;
using UnityEngine;
public class PoolableParticle : MonoBehaviour, IPoolable
{
[SerializeField]
private ParticleSystem _particleSystem = default;
public void OnRequest()
{
gameObject.SetActive(true);
}
public void Play()
{
_particleSystem.Play();
}
public void OnReturn(Action onReturned)
{
StartCoroutine(DoReturn(onReturned));
}
IEnumerator DoReturn(Action onReturned)
{
if (_particleSystem.isPlaying)
{
yield return new WaitForSeconds(_particleSystem.main.duration - (_particleSystem.time % _particleSystem.main.duration));
_particleSystem.Stop();
}
yield return new WaitUntil(() => _particleSystem.particleCount == 0);
onReturned.Invoke();
gameObject.SetActive(false);
}
}

11
UOP1_Project/Assets/Scripts/Pool/Example/PoolableParticle.cs.meta


fileFormatVersion: 2
guid: 91146385b82059840915ac17bbf904ae
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

22
UOP1_Project/Assets/Scripts/Pool/Example/ParticleFactorySO.cs


using UnityEngine;
using UOP1.Factory;
[CreateAssetMenu(fileName = "NewParticleFactory", menuName = "Factory/Particle Factory")]
public class ParticleFactorySO : ComponentFactorySO<PoolableParticle>
{
[SerializeField]
private PoolableParticle _prefab = default;
public override PoolableParticle Prefab
{
get
{
return _prefab;
}
set
{
_prefab = value;
}
}
}

21
UOP1_Project/Assets/Scripts/Pool/Example/PoolTester.cs


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PoolTester : MonoBehaviour
{
[SerializeField]
private ParticlePoolSO _pool = default;
private IEnumerator Start()
{
List<PoolableParticle> particles = _pool.Request(10) as List<PoolableParticle>;
foreach (PoolableParticle particle in particles)
{
particle.transform.position = Random.insideUnitSphere * 5f;
particle.Play();
}
yield return new WaitForSeconds(5f);
_pool.Return(particles);
}
}

13
UOP1_Project/Assets/Scripts/Pool/IPoolable.cs


using System;
namespace UOP1.Pool
{
/// <summary>
/// Represents an object that can be pooled.
/// </summary>
public interface IPoolable
{
void OnRequest();
void OnReturn(Action onReturned);
}
}
正在加载...
取消
保存