Commit 1
This commit is contained in:
85
Assets/Scripts/Optimization/StressTestSpawner.cs
Normal file
85
Assets/Scripts/Optimization/StressTestSpawner.cs
Normal file
@@ -0,0 +1,85 @@
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using OnlyScove.Scripts;
|
||||
|
||||
namespace Elbyss.Optimization
|
||||
{
|
||||
public class StressTestSpawner : MonoBehaviour
|
||||
{
|
||||
[Header("Spawn Settings")]
|
||||
public GameObject prefabToSpawn;
|
||||
public int spawnLimit = 1000;
|
||||
public int spawnsPerFrame = 10;
|
||||
public float spacing = 2.0f;
|
||||
|
||||
[Header("Testing Mode")]
|
||||
public bool useAutoStateMachine = true;
|
||||
|
||||
[Header("Optimization Options")]
|
||||
public bool stripHeavyComponents = false;
|
||||
|
||||
private List<GameObject> spawnedObjects = new List<GameObject>();
|
||||
private int currentSpawnCount = 0;
|
||||
private bool isSpawning = false;
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (isSpawning && currentSpawnCount < spawnLimit)
|
||||
{
|
||||
for (int i = 0; i < spawnsPerFrame && currentSpawnCount < spawnLimit; i++)
|
||||
{
|
||||
SpawnObject();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[ContextMenu("Start Stress Test")]
|
||||
public void StartStressTest() => isSpawning = true;
|
||||
|
||||
[ContextMenu("Clear All")]
|
||||
public void ClearAll()
|
||||
{
|
||||
foreach (var obj in spawnedObjects) if (obj != null) Destroy(obj);
|
||||
spawnedObjects.Clear();
|
||||
currentSpawnCount = 0;
|
||||
isSpawning = false;
|
||||
}
|
||||
|
||||
private void SpawnObject()
|
||||
{
|
||||
if (prefabToSpawn == null) return;
|
||||
|
||||
int rowSize = Mathf.CeilToInt(Mathf.Sqrt(spawnLimit));
|
||||
float x = (currentSpawnCount % rowSize) * spacing;
|
||||
float z = (currentSpawnCount / rowSize) * spacing;
|
||||
Vector3 spawnPos = transform.position + new Vector3(x, 0, z);
|
||||
|
||||
GameObject newObj = Instantiate(prefabToSpawn, spawnPos, transform.rotation);
|
||||
|
||||
if (useAutoStateMachine)
|
||||
{
|
||||
var realInput = newObj.GetComponent<InputReader>();
|
||||
if (realInput != null) realInput.enabled = false;
|
||||
|
||||
var originalSM = newObj.GetComponent<PlayerStateMachine>();
|
||||
if (originalSM != null)
|
||||
{
|
||||
DestroyImmediate(originalSM);
|
||||
var autoSM = newObj.AddComponent<AutoPlayerStateMachine>();
|
||||
autoSM.alwaysMoveForward = true;
|
||||
autoSM.alwaysRun = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (stripHeavyComponents)
|
||||
{
|
||||
if (newObj.TryGetComponent<Animator>(out var anim)) anim.enabled = false;
|
||||
if (newObj.TryGetComponent<CharacterController>(out var cc)) cc.enabled = false;
|
||||
if (newObj.TryGetComponent<PlayerStateMachine>(out var sm)) sm.enabled = false;
|
||||
}
|
||||
|
||||
spawnedObjects.Add(newObj);
|
||||
currentSpawnCount++;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user