云团视觉:用算法真实半径+透明度,随扩散渐大渐淡

This commit is contained in:
tian 2026-06-12 09:31:15 +08:00
parent d3295418b7
commit 8b71351a7b
2 changed files with 17 additions and 3 deletions

1
.gitignore vendored
View File

@ -59,3 +59,4 @@ src/Unity/obj/
src/Unity/Logs/ src/Unity/Logs/
src/Unity/UserSettings/ src/Unity/UserSettings/
unity_plugins/ unity_plugins/
nul

View File

@ -92,7 +92,10 @@ namespace CounterDrone.Unity
if (snap.EntityType == EntityType.Cloud) if (snap.EntityType == EntityType.Cloud)
{ {
float r = ParseCloudRadius(snap.StateData); float r = ParseCloudRadius(snap.StateData);
float opacity = ParseCloudOpacity(snap.StateData);
go.transform.localScale = UVector3.one * r; go.transform.localScale = UVector3.one * r;
var mat = go.GetComponent<Renderer>().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 prefab = _cloudPrefab != null ? _cloudPrefab : GameObject.CreatePrimitive(PrimitiveType.Sphere);
var go = Instantiate(prefab, pos, Quaternion.identity); var go = Instantiate(prefab, pos, Quaternion.identity);
go.name = cloud.Id; 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<Renderer>().material; var mat = go.GetComponent<Renderer>().material;
mat.color = new Color(1, 0, 0, 0.3f); mat.color = new Color(1, 0, 0, 0.3f);
_clouds[cloud.Id] = go; _clouds[cloud.Id] = go;
@ -155,7 +158,17 @@ namespace CounterDrone.Unity
_entityVisuals[drone.Id] = go; _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 try
{ {