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:
co-authored by
Claude Opus 5.5
parent
fe08fa5213
commit
d567d5992a
+12
-5
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user