public static void FixMissingPrefab()
        {
            Object o = Selection.activeObject;

            if (o is GTreePrototypeGroup)
            {
                string[] prefabAssetPaths = new string[]
                {
                    "Assets/Griffin - PolarisV2/_Demo/Prefabs/AutumnTree1.prefab",
                    "Assets/Griffin - PolarisV2/_Demo/Prefabs/SpringTree1.prefab",
                    "Assets/Griffin - PolarisV2/_Demo/Prefabs/Pine_00.prefab",
                    "Assets/Griffin - PolarisV2/_Demo/Prefabs/Pine_01.prefab",
                    "Assets/Griffin - PolarisV2/_Demo/Prefabs/Dead.prefab",
                    "Assets/Griffin - PolarisV2/_Demo/Prefabs/Dead_Break.prefab"
                };

                GTreePrototypeGroup group = o as GTreePrototypeGroup;
                group.Prototypes.Clear();
                for (int i = 0; i < prefabAssetPaths.Length; ++i)
                {
                    GameObject     p     = AssetDatabase.LoadAssetAtPath <GameObject>(prefabAssetPaths[i]);
                    GTreePrototype proto = GTreePrototype.Create(p);
                    proto.Refresh();
                    group.Prototypes.Add(proto);
                }

                EditorUtility.SetDirty(group);
            }
        }
        public static void FixMissingTreeDemo00()
        {
            Object o = Selection.activeObject;

            if (o is GTreePrototypeGroup)
            {
                string[] prefabAssetPaths = new string[]
                {
                    "Assets/Polaris - Low Poly Ecosystem/Polaris - Low Poly Terrain Engine/Samples/Pinwheel Studio/Prefabs/Pine_00.prefab",
                    "Assets/Polaris - Low Poly Ecosystem/Polaris - Low Poly Terrain Engine/Samples/Pinwheel Studio/Prefabs/Dead.prefab",
                    "Assets/Polaris - Low Poly Ecosystem/Polaris - Low Poly Terrain Engine/Samples/Pinwheel Studio/Prefabs/Pine_01.prefab",
                    "Assets/Polaris - Low Poly Ecosystem/Polaris - Low Poly Terrain Engine/Samples/Pinwheel Studio/Prefabs/Dead_Break.prefab"
                };

                GTreePrototypeGroup group = o as GTreePrototypeGroup;
                group.Prototypes.Clear();
                for (int i = 0; i < prefabAssetPaths.Length; ++i)
                {
                    GameObject     p     = AssetDatabase.LoadAssetAtPath <GameObject>(prefabAssetPaths[i]);
                    GTreePrototype proto = GTreePrototype.Create(p);
                    proto.Refresh();
                    group.Prototypes.Add(proto);
                }

                EditorUtility.SetDirty(group);
            }
        }
        private void DrawPrototypesListGUI()
        {
            string label, id;

            for (int i = 0; i < instance.Prototypes.Count; ++i)
            {
                GTreePrototype p = instance.Prototypes[i];
                CachePrefabPath(p);

                label = p.Prefab != null && !string.IsNullOrEmpty(p.Prefab.name) ? p.Prefab.name : "Tree " + i;
                id    = "treeprototype" + i + instance.GetInstanceID().ToString();

                int         index = i;
                GenericMenu menu  = new GenericMenu();
                menu.AddItem(
                    new GUIContent("Remove"),
                    false,
                    () => { ConfirmAndRemovePrototypeAtIndex(index); });
                menu.AddItem(
                    new GUIContent("Sync with Prefab"),
                    false,
                    () => { p.Refresh(); });

                GEditorCommon.Foldout(label, false, id, () =>
                {
                    if (p.Prefab != null)
                    {
                        DrawPreview(p.Prefab);
                    }

                    p.Prefab    = EditorGUILayout.ObjectField("Prefab", p.Prefab, typeof(GameObject), false) as GameObject;
                    p.Billboard = EditorGUILayout.ObjectField("Billboard", p.Billboard, typeof(BillboardAsset), false) as BillboardAsset;

                    EditorGUI.BeginChangeCheck();
                    p.PivotOffset  = EditorGUILayout.Slider("Pivot Offset", p.PivotOffset, -1f, 1f);
                    p.BaseRotation = Quaternion.Euler(GEditorCommon.InlineVector3Field("Base Rotation", p.BaseRotation.eulerAngles));
                    p.BaseScale    = GEditorCommon.InlineVector3Field("Base Scale", p.BaseScale);
                    if (EditorGUI.EndChangeCheck())
                    {
                        ResetNativeArrays();
                    }
                    GUI.enabled       = !p.KeepPrefabLayer;
                    p.Layer           = EditorGUILayout.LayerField("Layer", p.Layer);
                    GUI.enabled       = true;
                    p.KeepPrefabLayer = EditorGUILayout.Toggle("Keep Prefab Layer", p.KeepPrefabLayer);

                    p.ShadowCastingMode = (ShadowCastingMode)EditorGUILayout.EnumPopup("Cast Shadow", p.ShadowCastingMode);
                    p.ReceiveShadow     = EditorGUILayout.Toggle("Receive Shadow", p.ReceiveShadow);

                    p.BillboardShadowCastingMode = (ShadowCastingMode)EditorGUILayout.EnumPopup("Billboard Cast Shadow", p.BillboardShadowCastingMode);
                    p.BillboardReceiveShadow     = EditorGUILayout.Toggle("Billboard Receive Shadow", p.BillboardReceiveShadow);

                    GUI.enabled = false;
                    EditorGUILayout.Toggle("Has Collider", p.HasCollider);
                    GUI.enabled = true;
                }, menu);
            }
        }