From e6593192a74cbcf324720d671e93da3e0630b89a Mon Sep 17 00:00:00 2001 From: hzmt Date: Sat, 31 Jan 2026 22:03:18 -0600 Subject: [PATCH] Adding trick respawn logic --- Assets/Prefabs/Trick.prefab | 5 ++++- Assets/Scenes/Experiment.unity | 18 +++++++++++++++-- Assets/Scripts/Spawner.cs | 5 +++++ Assets/Scripts/TrickController.cs | 11 ++++++++++ Assets/Scripts/TrickSpawnKeeper.cs | 27 +++++++++++++++++++++++++ Assets/Scripts/TrickSpawnKeeper.cs.meta | 11 ++++++++++ 6 files changed, 74 insertions(+), 3 deletions(-) create mode 100644 Assets/Scripts/TrickSpawnKeeper.cs create mode 100644 Assets/Scripts/TrickSpawnKeeper.cs.meta diff --git a/Assets/Prefabs/Trick.prefab b/Assets/Prefabs/Trick.prefab index 933e89f..abf6bb5 100644 --- a/Assets/Prefabs/Trick.prefab +++ b/Assets/Prefabs/Trick.prefab @@ -184,7 +184,7 @@ MonoBehaviour: targetRefreshInterval: 0.4 consumeDistance: 0.35 wanderInterval: 1.2 - consumeCooldown: 5 + consumeCooldown: 3 trickPrefab: {fileID: 700000005} avoidPlayerRadius: 0 avoidTrickRadius: 0 @@ -200,3 +200,6 @@ MonoBehaviour: serializedVersion: 2 m_Bits: 4294967295 groundCheckDistance: 0.05 + despawnMinX: -12 + despawnMaxX: 12 + despawnMinY: -10 diff --git a/Assets/Scenes/Experiment.unity b/Assets/Scenes/Experiment.unity index 0f2d73c..ef30e47 100644 --- a/Assets/Scenes/Experiment.unity +++ b/Assets/Scenes/Experiment.unity @@ -2521,10 +2521,10 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Assembly-CSharp::Spawner objectToSpawn: {fileID: 700000000, guid: 8bf8957665594a718535d06aba0cdee7, type: 3} - spawnInterval: 3 + spawnInterval: 5 maxAlive: 1 spawnOnStart: 1 - repeatSpawns: 0 + repeatSpawns: 1 --- !u!1 &2100000100 GameObject: m_ObjectHideFlags: 0 @@ -2569,6 +2569,20 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 44f2fea877e8498fa4898917356fb2e6, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!114 &2100000103 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2100000100} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4eb1753179e848ed8662b6f039a33df9, type: 3} + m_Name: + m_EditorClassIdentifier: + spawner: {fileID: 2100000002} + checkInterval: 1 --- !u!1001 &1760117322204329348 PrefabInstance: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/Spawner.cs b/Assets/Scripts/Spawner.cs index 54805d9..4fc23fe 100644 --- a/Assets/Scripts/Spawner.cs +++ b/Assets/Scripts/Spawner.cs @@ -42,6 +42,11 @@ public class Spawner : MonoBehaviour } } + public void SpawnNow() + { + SpawnOnce(); + } + private IEnumerator SpawnRoutine() { // Infinite loop to keep spawning (can be modified) diff --git a/Assets/Scripts/TrickController.cs b/Assets/Scripts/TrickController.cs index a3db034..080a470 100644 --- a/Assets/Scripts/TrickController.cs +++ b/Assets/Scripts/TrickController.cs @@ -11,6 +11,7 @@ public class TrickController : MonoBehaviour private static readonly List ActiveTricks = new List(); private static PlayerPlatformerController[] cachedPlayers = Array.Empty(); private static float nextPlayerCacheTime; + public static int ActiveCount => ActiveTricks.Count; [SerializeField] private string treatTag = "Interactable"; [SerializeField] private float moveSpeed = 3.5f; @@ -30,6 +31,9 @@ public class TrickController : MonoBehaviour [SerializeField] private float jumpChancePerSecond = 0.5f; [SerializeField] private LayerMask groundMask = ~0; [SerializeField] private float groundCheckDistance = 0.05f; + [SerializeField] private float despawnMinX = -12f; + [SerializeField] private float despawnMaxX = 12f; + [SerializeField] private float despawnMinY = -10f; private Rigidbody2D body; private Transform target; @@ -74,6 +78,13 @@ public class TrickController : MonoBehaviour return; } + var position = transform.position; + if (position.x < despawnMinX || position.x > despawnMaxX || position.y < despawnMinY) + { + Destroy(gameObject); + return; + } + if (Time.time >= nextTargetTime) { target = FindNearestTreat(); diff --git a/Assets/Scripts/TrickSpawnKeeper.cs b/Assets/Scripts/TrickSpawnKeeper.cs new file mode 100644 index 0000000..cbeb6c0 --- /dev/null +++ b/Assets/Scripts/TrickSpawnKeeper.cs @@ -0,0 +1,27 @@ +using UnityEngine; + +public class TrickSpawnKeeper : MonoBehaviour +{ + [SerializeField] private Spawner spawner; + [SerializeField] private float checkInterval = 1f; + private float nextCheckTime; + + private void Update() + { + if (Time.time < nextCheckTime) + { + return; + } + + nextCheckTime = Time.time + checkInterval; + if (spawner == null) + { + return; + } + + if (TrickController.ActiveCount == 0) + { + spawner.SpawnNow(); + } + } +} diff --git a/Assets/Scripts/TrickSpawnKeeper.cs.meta b/Assets/Scripts/TrickSpawnKeeper.cs.meta new file mode 100644 index 0000000..6fdd91f --- /dev/null +++ b/Assets/Scripts/TrickSpawnKeeper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4eb1753179e848ed8662b6f039a33df9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: