From 7ae223960ed83382ebb1692659ff7c71cca2eb2d Mon Sep 17 00:00:00 2001 From: EmirHanMamak Date: Wed, 11 Mar 2026 02:43:29 +0300 Subject: [PATCH] feat: Add basic object pool pattern example --- .../Object Pool Pattern/BasicPool.meta | 8 + .../Object Pool Pattern/BasicPool/Prefab.meta | 8 + .../BasicPool/Prefab/BulletBasic.prefab | 151 ++++++ .../BasicPool/Prefab/BulletBasic.prefab.meta | 7 + .../Object Pool Pattern/BasicPool/Scene.meta | 8 + .../BasicPool/Scene/BasicPool.unity | 431 ++++++++++++++++++ .../BasicPool/Scene/BasicPool.unity.meta | 7 + .../Object Pool Pattern/BasicPool/Script.meta | 8 + .../BasicPool/Script/BulletPoolExample.cs | 31 ++ .../Script/BulletPoolExample.cs.meta | 3 + .../BasicPool/Script/Interface.meta | 8 + .../BasicPool/Script/Interface/IPoolable.cs | 8 + .../Script/Interface/IPoolable.cs.meta | 3 + .../BasicPool/Script/ObjectPool.cs | 65 +++ .../BasicPool/Script/ObjectPool.cs.meta | 3 + .../BasicPool/Script/SimpleBullet.cs | 52 +++ .../BasicPool/Script/SimpleBullet.cs.meta | 3 + UserSettings/EditorUserSettings.asset | 22 +- UserSettings/Layouts/default-6000.dwlt | 4 +- 19 files changed, 817 insertions(+), 13 deletions(-) create mode 100644 Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool.meta create mode 100644 Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Prefab.meta create mode 100644 Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Prefab/BulletBasic.prefab create mode 100644 Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Prefab/BulletBasic.prefab.meta create mode 100644 Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Scene.meta create mode 100644 Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Scene/BasicPool.unity create mode 100644 Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Scene/BasicPool.unity.meta create mode 100644 Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script.meta create mode 100644 Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script/BulletPoolExample.cs create mode 100644 Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script/BulletPoolExample.cs.meta create mode 100644 Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script/Interface.meta create mode 100644 Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script/Interface/IPoolable.cs create mode 100644 Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script/Interface/IPoolable.cs.meta create mode 100644 Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script/ObjectPool.cs create mode 100644 Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script/ObjectPool.cs.meta create mode 100644 Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script/SimpleBullet.cs create mode 100644 Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script/SimpleBullet.cs.meta diff --git a/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool.meta b/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool.meta new file mode 100644 index 0000000..9c2acbf --- /dev/null +++ b/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5c28389503057f3c8be90c6fd16e2d9d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Prefab.meta b/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Prefab.meta new file mode 100644 index 0000000..df558d8 --- /dev/null +++ b/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f0dfa5029f5ee8b1f901301789f8b2b6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Prefab/BulletBasic.prefab b/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Prefab/BulletBasic.prefab new file mode 100644 index 0000000..0ca5737 --- /dev/null +++ b/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Prefab/BulletBasic.prefab @@ -0,0 +1,151 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &7764565649340673978 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8730737077505939285} + - component: {fileID: 3821560784986757933} + - component: {fileID: 7157529880848919745} + - component: {fileID: 6020902644374522337} + - component: {fileID: 6307850539997563377} + - component: {fileID: 6199004465765286540} + m_Layer: 0 + m_Name: BulletBasic + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8730737077505939285 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7764565649340673978} + serializedVersion: 2 + 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} +--- !u!33 &3821560784986757933 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7764565649340673978} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &7157529880848919745 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7764565649340673978} + 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!135 &6020902644374522337 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7764565649340673978} + 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_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &6307850539997563377 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7764565649340673978} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 53cf816d4a4f446e842eef92e12876d6, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!54 &6199004465765286540 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7764565649340673978} + serializedVersion: 4 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_UseGravity: 0 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 diff --git a/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Prefab/BulletBasic.prefab.meta b/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Prefab/BulletBasic.prefab.meta new file mode 100644 index 0000000..19ab352 --- /dev/null +++ b/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Prefab/BulletBasic.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1ac9359da83bcc5588960380d246f909 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Scene.meta b/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Scene.meta new file mode 100644 index 0000000..650b761 --- /dev/null +++ b/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Scene.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b5d3b4cea507c06cf86fbb9860f68eca +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Scene/BasicPool.unity b/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Scene/BasicPool.unity new file mode 100644 index 0000000..05bd509 --- /dev/null +++ b/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Scene/BasicPool.unity @@ -0,0 +1,431 @@ +%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: 10 + 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_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 + 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_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: 1 + m_PVRFilteringGaussRadiusAO: 1 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + 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 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &83674396 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 83674397} + - component: {fileID: 83674398} + m_Layer: 0 + m_Name: Launcher + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &83674397 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 83674396} + serializedVersion: 2 + 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} +--- !u!114 &83674398 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 83674396} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2c29fd3edcc342369e990cfd7fb0810d, type: 3} + m_Name: + m_EditorClassIdentifier: + prefab: {fileID: 6307850539997563377, guid: 1ac9359da83bcc5588960380d246f909, type: 3} +--- !u!1 &988401686 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 988401689} + - component: {fileID: 988401688} + - component: {fileID: 988401687} + - component: {fileID: 988401690} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &988401687 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 988401686} + m_Enabled: 1 +--- !u!20 &988401688 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 988401686} + 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_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + 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 &988401689 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 988401686} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -5} + 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!114 &988401690 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 988401686} + 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 &1822460036 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1822460038} + - component: {fileID: 1822460037} + - component: {fileID: 1822460039} + 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 &1822460037 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1822460036} + m_Enabled: 1 + serializedVersion: 11 + m_Type: 1 + 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_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 +--- !u!4 &1822460038 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1822460036} + serializedVersion: 2 + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!114 &1822460039 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1822460036} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Version: 3 + m_UsePipelineSettings: 1 + m_AdditionalLightsShadowResolutionTier: 2 + m_LightLayerMask: 1 + m_RenderingLayers: 1 + m_CustomShadowLayers: 0 + m_ShadowLayerMask: 1 + m_ShadowRenderingLayers: 1 + m_LightCookieSize: {x: 1, y: 1} + m_LightCookieOffset: {x: 0, y: 0} + m_SoftShadowQuality: 0 +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 988401689} + - {fileID: 1822460038} + - {fileID: 83674397} diff --git a/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Scene/BasicPool.unity.meta b/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Scene/BasicPool.unity.meta new file mode 100644 index 0000000..9bc83fa --- /dev/null +++ b/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Scene/BasicPool.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 37f1dc33720b63e00a3a8ae6e0bb4a44 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script.meta b/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script.meta new file mode 100644 index 0000000..ca977ce --- /dev/null +++ b/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f4afddf51fea76732b5b6e40f1f39ff2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script/BulletPoolExample.cs b/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script/BulletPoolExample.cs new file mode 100644 index 0000000..b897a83 --- /dev/null +++ b/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script/BulletPoolExample.cs @@ -0,0 +1,31 @@ +using System; +using UnityEngine; + +namespace Patterns_And_Principles.Patterns.Object_Pool_Pattern.BasicPool.Script +{ + public class BulletPoolExample : MonoBehaviour + { + [SerializeField] + private SimpleBullet prefab; + private ObjectPool _bulletPool; + + private void Start() + { + _bulletPool = new ObjectPool(prefab, transform, 20, false); + } + + private void Update() + { + if (Input.GetKeyDown(KeyCode.Space)) + { + SimpleBullet bullet = _bulletPool.Get(); + bullet.transform.position = transform.position; + } + } + + public void ReturnBullet(SimpleBullet bullet) + { + _bulletPool.Release(bullet); + } + } +} \ No newline at end of file diff --git a/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script/BulletPoolExample.cs.meta b/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script/BulletPoolExample.cs.meta new file mode 100644 index 0000000..d93a469 --- /dev/null +++ b/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script/BulletPoolExample.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2c29fd3edcc342369e990cfd7fb0810d +timeCreated: 1773185316 \ No newline at end of file diff --git a/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script/Interface.meta b/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script/Interface.meta new file mode 100644 index 0000000..e3efdf7 --- /dev/null +++ b/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script/Interface.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cb987d66b81fec2d58622c576954a2e3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script/Interface/IPoolable.cs b/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script/Interface/IPoolable.cs new file mode 100644 index 0000000..e12495f --- /dev/null +++ b/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script/Interface/IPoolable.cs @@ -0,0 +1,8 @@ +namespace Patterns_And_Principles.Patterns.Object_Pool_Pattern.BasicPool.Script.Interface +{ + public interface IPoolable + { + void OnSpawn(); + void OnDespawn(); + } +} \ No newline at end of file diff --git a/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script/Interface/IPoolable.cs.meta b/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script/Interface/IPoolable.cs.meta new file mode 100644 index 0000000..bbb7685 --- /dev/null +++ b/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script/Interface/IPoolable.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6f8b7e409e614cf8857bb9e4bd88d77b +timeCreated: 1773175851 \ No newline at end of file diff --git a/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script/ObjectPool.cs b/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script/ObjectPool.cs new file mode 100644 index 0000000..4d5ddc9 --- /dev/null +++ b/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script/ObjectPool.cs @@ -0,0 +1,65 @@ +using System.Collections.Generic; +using Patterns_And_Principles.Patterns.Object_Pool_Pattern.BasicPool.Script.Interface; +using UnityEngine; + +namespace Patterns_And_Principles.Patterns.Object_Pool_Pattern.BasicPool.Script +{ + public class ObjectPool where T : Component + { + private Queue _pool = new Queue(); + private T _prefab; + private Transform _parent; + private int _maxSize; + private bool _autoExpand; + + public ObjectPool(T prefab, Transform parent = null, int maxSize = 0, bool autoExpand = true) + { + this._prefab = prefab; + this._parent = parent; + this._maxSize = maxSize; + this._autoExpand = autoExpand; + for (int i = 0; i < maxSize; i++) + { + CreateObject(); + } + } + + private T CreateObject() + { + T obj = GameObject.Instantiate(_prefab, _parent); + obj.gameObject.SetActive(false); + _pool.Enqueue(obj); + return obj; + } + + #region Public Functions + + public T Get() + { + if (_pool.Count == 0) + { + return _autoExpand ? CreateObject() : null; + } + + T obj = _pool.Dequeue(); + obj.gameObject.SetActive(true); + if (obj.TryGetComponent(out var poolable)) + { + poolable.OnSpawn(); + } + + return obj; + } + public void Release(T obj) + { + if (obj.TryGetComponent(out var poolable)) + { + poolable.OnDespawn(); + } + obj.gameObject.SetActive(false); + _pool.Enqueue(obj); + } + + #endregion + } +} \ No newline at end of file diff --git a/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script/ObjectPool.cs.meta b/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script/ObjectPool.cs.meta new file mode 100644 index 0000000..10ffe44 --- /dev/null +++ b/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script/ObjectPool.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ad012e3e257846cb8213f21d19fd0872 +timeCreated: 1773175876 \ No newline at end of file diff --git a/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script/SimpleBullet.cs b/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script/SimpleBullet.cs new file mode 100644 index 0000000..4134826 --- /dev/null +++ b/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script/SimpleBullet.cs @@ -0,0 +1,52 @@ +using Patterns_And_Principles.Patterns.Object_Pool_Pattern.BasicPool.Script.Interface; +using UnityEngine; + +namespace Patterns_And_Principles.Patterns.Object_Pool_Pattern.BasicPool.Script +{ + public class SimpleBullet : MonoBehaviour, IPoolable + { + private float _speed = 10f; + + public void OnSpawn() + { + /* + * OnSpawn'da Neler Yapılır? + + Genelde: + + velocity verilir + + timer resetlenir + + particle resetlenir + + trail temizlenir + + state resetlenir + */ + } + + public void OnDespawn() + { + /* + * OnDespawn'da Neler Yapılır? + + Genelde: + + velocity sıfırlanır + + particle durdurulur + + state temizlenir + */ + } + void Update() + { + transform.Translate(Vector3.right * _speed * Time.deltaTime); + } + void OnCollisionEnter(Collision collision) + { + FindObjectOfType().ReturnBullet(this); + } + } +} \ No newline at end of file diff --git a/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script/SimpleBullet.cs.meta b/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script/SimpleBullet.cs.meta new file mode 100644 index 0000000..f51bec7 --- /dev/null +++ b/Assets/Patterns_And_Principles/Patterns/Object Pool Pattern/BasicPool/Script/SimpleBullet.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 53cf816d4a4f446e842eef92e12876d6 +timeCreated: 1773185342 \ No newline at end of file diff --git a/UserSettings/EditorUserSettings.asset b/UserSettings/EditorUserSettings.asset index 06a302b..bce6854 100644 --- a/UserSettings/EditorUserSettings.asset +++ b/UserSettings/EditorUserSettings.asset @@ -9,35 +9,35 @@ EditorUserSettings: value: 18134705175a055722080a3115371d4a0d55006876786860616b0471b8b07a68ffab74f9ee2a3a30300cea1a11320d0beb1a0c25f7060f494b4cc80018eb09361fc211cb1f862d19c51d19dcc413d6ade0d8ddfcddf9f4d9d29195fcfde6ebeae6f0a9c9afa6f8c5b89ff7a1aacececac4eba4d7c9d28bda flags: 0 RecentlyUsedSceneGuid-0: - value: 0008525551515d0b0c56557214270a4414151a7a7e7d7466287c1b62b3b06c6f - flags: 0 - RecentlyUsedSceneGuid-1: value: 06070c56510d5859095f592646250a44144e197f2a71243378281c6ae1b53060 flags: 0 - RecentlyUsedSceneGuid-2: + RecentlyUsedSceneGuid-1: value: 0707065706560d0a09575472437109444f1540787d2922662f284d67e6b53768 flags: 0 - RecentlyUsedSceneGuid-3: + RecentlyUsedSceneGuid-2: value: 5700500303560d0f555b092448760e4415154b7b2f2a76692c791936bbb4646b flags: 0 - RecentlyUsedSceneGuid-4: + RecentlyUsedSceneGuid-3: value: 07090c02040d0b0b09590e2647770b44434f1c78292922347d2c4a31e6e66c3a flags: 0 - RecentlyUsedSceneGuid-5: + RecentlyUsedSceneGuid-4: value: 5001575e00560a5f5a5658234877074842161b72797b24617b2c1c6be7b4663e flags: 0 - RecentlyUsedSceneGuid-6: + RecentlyUsedSceneGuid-5: value: 06090c535d035b09585b0f7415205e4442164a2b7f7977672f2f4967e1e6646e flags: 0 - RecentlyUsedSceneGuid-7: + RecentlyUsedSceneGuid-6: value: 5501000452055b035b0a0e2115760944464e4c7f7f2927347d2a1e62b3b5356b flags: 0 - RecentlyUsedSceneGuid-8: + RecentlyUsedSceneGuid-7: value: 0252515555015f0d0f085c24427a5e41134f4d727a78706579714e6bb0b5656a flags: 0 - RecentlyUsedSceneGuid-9: + RecentlyUsedSceneGuid-8: value: 0609575504540b5d5d5f582341770f134f4f4f722a7172617a7e4d61bbe43261 flags: 0 + RecentlyUsedSceneGuid-9: + value: 5006525701565a085a5c5c2046705a4046164b2b7429236628791f31b6e1606c + flags: 0 lightmappingBakingProfile: value: 51 flags: 0 diff --git a/UserSettings/Layouts/default-6000.dwlt b/UserSettings/Layouts/default-6000.dwlt index 8bcf413..4fc8474 100644 --- a/UserSettings/Layouts/default-6000.dwlt +++ b/UserSettings/Layouts/default-6000.dwlt @@ -1684,7 +1684,7 @@ MonoBehaviour: scrollPos: {x: 0, y: 0} m_SelectedIDs: 6edd0000 m_LastClickedID: 56686 - m_ExpandedIDs: 0000000034ba000036ba000038ba00003aba00003cba00003eba000040ba000042ba000044ba000046ba000048ba00004aba00004cba00004eba000050ba000052ba000054ba000056ba000058ba00005aba00005cba00005eba000060ba000062ba0000 + m_ExpandedIDs: 000000004aba00004cba00004eba000050ba000052ba000054ba000056ba000058ba00005aba00005cba00005eba000060ba000062ba000064ba000066ba000068ba00006aba00006cba00006eba000070ba000072ba000074ba000076ba000078ba0000 m_RenameOverlay: m_UserAcceptedRename: 0 m_Name: @@ -1713,7 +1713,7 @@ MonoBehaviour: scrollPos: {x: 0, y: 0} m_SelectedIDs: m_LastClickedID: 0 - m_ExpandedIDs: 0000000034ba000036ba000038ba00003aba00003cba00003eba000040ba000042ba000044ba000046ba000048ba00004aba00004cba00004eba000050ba000052ba000054ba000056ba000058ba00005aba00005cba00005eba000060ba000062ba0000 + m_ExpandedIDs: 000000004aba00004cba00004eba000050ba000052ba000054ba000056ba000058ba00005aba00005cba00005eba000060ba000062ba000064ba000066ba000068ba00006aba00006cba00006eba000070ba000072ba000074ba000076ba000078ba0000 m_RenameOverlay: m_UserAcceptedRename: 0 m_Name: