Beispiel #1
0
    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();
    }
Beispiel #2
0
    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);
        }
    }
Beispiel #3
0
    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;
        }
    }