diff --git a/.gitignore b/.gitignore index 2bd91eb..6ac5d77 100644 --- a/.gitignore +++ b/.gitignore @@ -59,3 +59,4 @@ src/Unity/obj/ src/Unity/Logs/ src/Unity/UserSettings/ unity_plugins/ +nul diff --git a/src/Unity/Assets/Scripts/Managers/SimulationRunner.cs b/src/Unity/Assets/Scripts/Managers/SimulationRunner.cs index 6a2adbe..3f204cc 100644 --- a/src/Unity/Assets/Scripts/Managers/SimulationRunner.cs +++ b/src/Unity/Assets/Scripts/Managers/SimulationRunner.cs @@ -92,7 +92,10 @@ namespace CounterDrone.Unity if (snap.EntityType == EntityType.Cloud) { float r = ParseCloudRadius(snap.StateData); + float opacity = ParseCloudOpacity(snap.StateData); go.transform.localScale = UVector3.one * r; + var mat = go.GetComponent().material; + mat.color = new Color(1, 0, 0, opacity); } } @@ -104,8 +107,8 @@ namespace CounterDrone.Unity var prefab = _cloudPrefab != null ? _cloudPrefab : GameObject.CreatePrimitive(PrimitiveType.Sphere); var go = Instantiate(prefab, pos, Quaternion.identity); go.name = cloud.Id; - go.transform.localScale = UVector3.one * 30f; - // 半透明红色 + float r = cloud.Dispersion.Radius; + go.transform.localScale = UVector3.one * r; var mat = go.GetComponent().material; mat.color = new Color(1, 0, 0, 0.3f); _clouds[cloud.Id] = go; @@ -155,7 +158,17 @@ namespace CounterDrone.Unity _entityVisuals[drone.Id] = go; } - private float ParseCloudRadius(string stateData) + private float ParseCloudOpacity(string stateData) + { + try + { + using var doc = JsonDocument.Parse(stateData); + if (doc.RootElement.TryGetProperty("opacity", out var o)) + return o.GetSingle(); + } + catch { } + return 0.5f; + } { try {