public override void OnInspectorGUI() { base.OnInspectorGUI(); CelestialSphere celestial = target as CelestialSphere; if (GUILayout.Button("拾取子节点")) { CollectChildren(celestial); } if (GUILayout.Button("随机摆放节点")) { celestial.ResetEllipsoid(); RandomChildren(celestial); } if (GUILayout.Button("均匀摆放节点")) { celestial.ResetEllipsoid(); celestial.PlaceChildrenAverage(); } if (GUILayout.Button("重建椭球体")) { celestial.ResetEllipsoid(); } serializedObject.ApplyModifiedProperties(); }
private void CollectChildren(CelestialSphere celestial) { if (celestial.children == null) { celestial.children = new List <Transform>(); } celestial.children.Clear(); var count = celestial.transform.childCount; for (var i = 0; i < count; i++) { var c = celestial.transform.GetChild(i); celestial.children.Add(c); } }
private void RandomChildren(CelestialSphere celestial) { Random r = new Random((int)DateTime.Now.Ticks); for (int i = 0; i < celestial.children.Count; i++) { Vector3 d = Vector3.zero; var sign = r.Next(0, 2) > 0 ? 1 : -1; d.x = sign * (float)r.NextDouble(); sign = r.Next(0, 2) > 0 ? 1 : -1; d.y = sign * (float)r.NextDouble(); sign = r.Next(0, 2) > 0 ? 1 : -1; d.z = sign * (float)r.NextDouble(); var p = celestial.GetPointOnEllipsoid(d); celestial.children[i].transform.position = p; } }