Less garbage, fewer GC hitches: no Joint array per part every 0.5 s, cheap aim check after clicks, cached FPS/ping/chat labels; perf report measures object sync, vehicle fx and part/bolt sync correctly

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Nico Meister
2026-10-05 16:31:56 +02:00
co-authored by Claude Opus 5.5
parent fe08fa5213
commit d567d5992a
4 changed files with 71 additions and 21 deletions
+12 -5
View File
@@ -167,18 +167,25 @@ namespace MSCO
}
}
static Camera aimCamera;
static int aimCameraFrame = -1;
static bool IsAimedAt(Fsm fsm, out float aimDistance)
{
aimDistance = float.MaxValue;
GameObject go = fsm.GameObject;
Camera cam = Camera.main;
// Läuft im Klick-Fenster für jede FSM, die den Zustand wechselt: Kamera nur einmal pro Bild suchen
if (aimCameraFrame != Time.frameCount) { aimCameraFrame = Time.frameCount; aimCamera = Camera.main; }
Camera cam = aimCamera;
if (go == null || cam == null) return false;
// Erst der billige Abstand, dann die Namen (jeder .name-Zugriff erzeugt einen neuen String)
Transform camT = cam.transform;
Vector3 toObject = go.transform.position - camT.position;
if (toObject.sqrMagnitude > ClickRange * ClickRange || Vector3.Dot(toObject, camT.forward) < 0f) return false;
string root = go.transform.root.name;
if (root == "PLAYER" || root.StartsWith("MSCO_")) return false;
Vector3 toObject = go.transform.position - cam.transform.position;
if (toObject.magnitude > ClickRange || Vector3.Dot(toObject, cam.transform.forward) < 0f) return false;
aimDistance = Vector3.Cross(cam.transform.forward, toObject).magnitude; // Abstand zur Blickachse
aimDistance = Vector3.Cross(camT.forward, toObject).magnitude; // Abstand zur Blickachse
return true;
}