Esempio n. 1
0
        private static void PostProcessingSetup()
        {
#if UNITY_POST_PROCESSING_STACK_V2
            var sceneDescriptors  = FindObjectsOfType(typeof(VRC_SceneDescriptor)) as VRC_SceneDescriptor[];
            var avatarDescriptors = FindObjectsOfType(typeof(VRC_AvatarDescriptor)) as VRC_AvatarDescriptor[];

            if (UpdateLayers.AreLayersSetup() || EditorUtility.DisplayDialog("Layers Missing!", "You haven't setup the project layers from the VRCSDK Builder tab.\r\n\r\nSelect Continue to set them up now.", "Continue", "Cancel"))
            {
                UpdateLayers.SetupEditorLayers();

                if (sceneDescriptors.Length == 0)
                {
                    if (avatarDescriptors.Length > 0)
                    {
                        SetupBasicPostProcessing();
                    }
                    else if (EditorUtility.DisplayDialog("Scene descriptor missing!", "No scene descriptor or avatar descriptors was found. A scene descriptor must exist and contain a reference camera for post-processing to appear in-game.\r\n\r\nYou can add a scene descriptor by adding a VRCWorld prefab included with the SDK.\r\n\r\nSelect Cancel to return and add a scene descriptor so the setup can set the reference camera for you, or select Continue to ignore this warning.", "Continue",
                                                         "Cancel"))
                    {
                        SetupBasicPostProcessing();
                    }
                }
                else if (sceneDescriptors.Length > 1)
                {
                    EditorUtility.DisplayDialog("Multiple scene descriptors!", "Multiple scene descriptors found, remove any you aren't using and run the setup again.", "OK");
                }
                else
                {
                    SetupWorldPostProcessing(sceneDescriptors);
                }
            }
#endif
        }
Esempio n. 2
0
        private static bool SetupLayersCollisionMatrixValidate()
        {
            if (UpdateLayers.AreLayersSetup() && UpdateLayers.IsCollisionLayerMatrixSetup())
            {
                return(false);
            }

            return(true);
        }
Esempio n. 3
0
        public static void SetupLayersCollisionMatrix()
        {
            if (!UpdateLayers.AreLayersSetup())
            {
                UpdateLayers.SetupEditorLayers();
            }

            if (!UpdateLayers.IsCollisionLayerMatrixSetup())
            {
                UpdateLayers.SetupCollisionLayerMatrix();
            }
        }
Esempio n. 4
0
    void OnGUISceneCheck(VRCSDK2.VRC_SceneDescriptor scene)
    {
        CheckUploadChanges(scene);

        EditorGUILayout.InspectorTitlebar(true, scene.gameObject);

        if (VRC.Core.APIUser.CurrentUser != null && VRC.Core.APIUser.CurrentUser.hasScriptingAccess && !CustomDLLMaker.DoesScriptDirExist())
        {
            CustomDLLMaker.CreateDirectories();
        }

        Vector3 g = Physics.gravity;

        if (g.x != 0.0f || g.z != 0.0f)
        {
            OnGUIWarning(scene, "Gravity vector is not straight down. Though we support different gravity, player orientation is always 'upwards' so things don't always behave as you intend.");
        }
        if (g.y > 0)
        {
            OnGUIWarning(scene, "Gravity vector is not straight down, inverted or zero gravity will make walking extremely difficult.");
        }
        if (g.y == 0)
        {
            OnGUIWarning(scene, "Zero gravity will make walking extremely difficult, though we support different gravity, player orientation is always 'upwards' so this may not have the effect you're looking for.");
        }

        scene.useAssignedLayers = true;
        if (scene.useAssignedLayers)
        {
            if (!UpdateLayers.AreLayersSetup())
            {
                OnGUIWarning(scene, "Layers are not setup properly. Please press the button above.");
            }

            if (UpdateLayers.AreLayersSetup() && !UpdateLayers.IsCollisionLayerMatrixSetup())
            {
                OnGUIWarning(scene, "Physics Collision Layer Matrix is not setup correctly. Please press the button above.");
            }
        }

        // warn those without scripting access if they choose to script locally
        if (VRC.Core.APIUser.CurrentUser != null && !VRC.Core.APIUser.CurrentUser.hasScriptingAccess && CustomDLLMaker.DoesScriptDirExist())
        {
            OnGUIWarning(scene, "Your account does not have permissions to upload custom scripts. You can test locally but need to contact VRChat to publish your world with scripts.");
        }

        // auto create VRCScript dir for those with access
        if (VRC.Core.APIUser.CurrentUser != null && VRC.Core.APIUser.CurrentUser.hasScriptingAccess && !CustomDLLMaker.DoesScriptDirExist())
        {
            CustomDLLMaker.CreateDirectories();
        }
    }
Esempio n. 5
0
    private void OnGUI()
    {
        //Editor Window
        using (new GUILayout.VerticalScope())
        {
            EditorGUILayout.LabelField(version);
            if (GUILayout.Button(linktext))
            {
                OpenLink(link);
            }

            EditorGUILayout.Space();
            EditorGUILayout.LabelField("Layer 設定", EditorStyles.boldLabel);
            if (UpdateLayers.AreLayersSetup())
            {
                EditorGUILayout.LabelField("レイヤーは VRChat 向けに設定されています。");
            }
            else
            {
                if (GUILayout.Button("Setup Layers"))
                {
                    if (EditorUtility.DisplayDialog("Setup Layers for VRChat", "プロジェクトのレイヤー設定を VRChat 用に設定します。よろしいですか?", "OK", "Cancel"))
                    {
                        UpdateLayers.SetupEditorLayers();
                    }
                }
            }

            EditorGUILayout.Space();
            EditorGUILayout.LabelField("Collision 設定", EditorStyles.boldLabel);
            if (UpdateLayers.IsCollisionLayerMatrixSetup())
            {
                EditorGUILayout.LabelField("レイヤー毎衝突判定は VRChat 向けに設定されています。");
            }
            else
            {
                if (GUILayout.Button("Setup Collision Matrix"))
                {
                    if (EditorUtility.DisplayDialog("Setup Collision Matrix for VRChat", "プロジェクトのレイヤー毎衝突判定を VRChat 用に設定します。よろしいですか?", "OK", "Cancel"))
                    {
                        UpdateLayers.SetupCollisionLayerMatrix();
                    }
                }
            }
        }
    }
        private static bool OnGUISceneSetup()
        {
            bool mandatoryExpand = !UpdateLayers.AreLayersSetup() || !UpdateLayers.IsCollisionLayerMatrixSetup();

            if (mandatoryExpand)
            {
                EditorGUILayout.LabelField("VRChat Scene Setup", VRCSdkControlPanel.titleGuiStyle,
                                           GUILayout.Height(50));
            }

            if (!UpdateLayers.AreLayersSetup())
            {
                GUILayout.BeginVertical(VRCSdkControlPanel.boxGuiStyle, GUILayout.Height(100),
                                        GUILayout.Width(VRCSdkControlPanel.SdkWindowWidth));
                GUILayout.BeginHorizontal();
                GUILayout.BeginVertical(GUILayout.Width(300));
                EditorGUILayout.Space();
                GUILayout.Label("Layers", VRCSdkControlPanel.infoGuiStyle);
                GUILayout.Label(
                    "VRChat scenes must have the same Unity layer configuration as VRChat so we can all predict things like physics and collisions. Pressing this button will configure your project's layers to match VRChat.",
                    VRCSdkControlPanel.infoGuiStyle, GUILayout.Width(300));
                GUILayout.EndVertical();
                GUILayout.BeginVertical(GUILayout.Width(150));
                GUILayout.Label("", GUILayout.Height(15));
                if (UpdateLayers.AreLayersSetup())
                {
                    GUILayout.Label("Step Complete!", VRCSdkControlPanel.infoGuiStyle);
                }
                else if (GUILayout.Button("Setup Layers for VRChat", GUILayout.Width(172)))
                {
                    bool doIt = EditorUtility.DisplayDialog("Setup Layers for VRChat",
                                                            "This adds all VRChat layers to your project and pushes any custom layers down the layer list. If you have custom layers assigned to gameObjects, you'll need to reassign them. Are you sure you want to continue?",
                                                            "Do it!", "Don't do it");
                    if (doIt)
                    {
                        UpdateLayers.SetupEditorLayers();
                    }
                }

                GUILayout.EndVertical();
                GUILayout.EndHorizontal();
                GUILayout.EndVertical();
                GUILayout.Space(10);
            }

            if (!UpdateLayers.IsCollisionLayerMatrixSetup())
            {
                GUILayout.BeginVertical(VRCSdkControlPanel.boxGuiStyle, GUILayout.Height(100),
                                        GUILayout.Width(VRCSdkControlPanel.SdkWindowWidth));
                GUILayout.BeginHorizontal();
                GUILayout.BeginVertical(GUILayout.Width(300));
                EditorGUILayout.Space();
                GUILayout.Label("Collision Matrix", VRCSdkControlPanel.infoGuiStyle);
                GUILayout.Label(
                    "VRChat uses specific layers for collision. In order for testing and development to run smoothly it is necessary to configure your project's collision matrix to match that of VRChat.",
                    VRCSdkControlPanel.infoGuiStyle, GUILayout.Width(300));
                GUILayout.EndVertical();
                GUILayout.BeginVertical(GUILayout.Width(150));
                GUILayout.Label("", GUILayout.Height(15));
                if (UpdateLayers.AreLayersSetup() == false)
                {
                    GUILayout.Label("You must first configure your layers for VRChat to proceed. Please see above.",
                                    VRCSdkControlPanel.infoGuiStyle);
                }
                else if (UpdateLayers.IsCollisionLayerMatrixSetup())
                {
                    GUILayout.Label("Step Complete!", VRCSdkControlPanel.infoGuiStyle);
                }
                else
                {
                    if (GUILayout.Button("Set Collision Matrix", GUILayout.Width(172)))
                    {
                        bool doIt = EditorUtility.DisplayDialog("Setup Collision Layer Matrix for VRChat",
                                                                "This will setup the correct physics collisions in the PhysicsManager for VRChat layers. Are you sure you want to continue?",
                                                                "Do it!", "Don't do it");
                        if (doIt)
                        {
                            UpdateLayers.SetupCollisionLayerMatrix();
                        }
                    }
                }

                GUILayout.EndVertical();
                GUILayout.EndHorizontal();
                GUILayout.EndVertical();
                GUILayout.Space(10);
            }

            return(mandatoryExpand);
        }
Esempio n. 7
0
    void OnGUIScene(VRCSDK2.VRC_SceneDescriptor scene)
    {
        string lastUrl          = VRC_SdkBuilder.GetLastUrl();
        bool   lastBuildPresent = lastUrl != null;

        string worldVersion = "-1";

        PipelineManager[] pms = (PipelineManager[])VRC.Tools.FindSceneObjectsOfTypeAll <PipelineManager>();
        if (pms.Length == 1 && !string.IsNullOrEmpty(pms[0].blueprintId))
        {
            if (scene.apiWorld == null)
            {
                ApiWorld world = API.FromCacheOrNew <ApiWorld>(pms[0].blueprintId);
                world.Fetch(null, false,
                            (c) => scene.apiWorld = c.Model as ApiWorld,
                            (c) =>
                {
                    if (c.Code == 404)
                    {
                        Debug.LogErrorFormat("Could not load world {0} because it didn't exist.", pms[0].blueprintId);
                        ApiCache.Invalidate <ApiWorld>(pms[0].blueprintId);
                    }
                    else
                    {
                        Debug.LogErrorFormat("Could not load world {0} because {1}", pms[0].blueprintId, c.Error);
                    }
                });
                scene.apiWorld = world;
            }
            worldVersion = (scene.apiWorld as ApiWorld).version.ToString();
        }
        EditorGUILayout.LabelField("World Version: " + worldVersion);

        EditorGUILayout.Space();

        if (!UpdateLayers.AreLayersSetup() && GUILayout.Button("Setup Layers for VRChat"))
        {
            bool doIt = EditorUtility.DisplayDialog("Setup Layers for VRChat", "This adds all VRChat layers to your project and pushes any custom layers down the layer list. If you have custom layers assigned to gameObjects, you'll need to reassign them. Are you sure you want to continue?", "Do it!", "Don't do it");
            if (doIt)
            {
                UpdateLayers.SetupEditorLayers();
            }
        }

        if (UpdateLayers.AreLayersSetup() && !UpdateLayers.IsCollisionLayerMatrixSetup() && GUILayout.Button("Setup Collision Layer Matrix for VRChat"))
        {
            bool doIt = EditorUtility.DisplayDialog("Setup Collision Layer Matrix for VRChat", "This will setup the correct physics collisions in the PhysicsManager for VRChat layers. Are you sure you want to continue?", "Do it!", "Don't do it");
            if (doIt)
            {
                UpdateLayers.SetupCollisionLayerMatrix();
            }
        }

        scene.autoSpatializeAudioSources = EditorGUILayout.ToggleLeft("Apply 3D spatialization to AudioSources automatically at runtime (override settings by adding an ONSPAudioSource component to game object)", scene.autoSpatializeAudioSources);
        if (GUILayout.Button("Enable 3D spatialization on all 3D AudioSources in scene now"))
        {
            bool doIt = EditorUtility.DisplayDialog("Enable Spatialization", "This will add an ONSPAudioSource script to every 3D AudioSource in the current scene, and enable default settings for spatialization.  Are you sure you want to continue?", "Do it!", "Don't do it");
            if (doIt)
            {
                if (_EnableSpatialization != null)
                {
                    _EnableSpatialization();
                }
                else
                {
                    Debug.LogError("VrcSdkControlPanel: EnableSpatialization callback not found!");
                }
            }
        }

        GUI.enabled = (GUIErrors.Count == 0 && checkedForIssues);
        EditorGUILayout.Space();
        EditorGUILayout.BeginVertical();
        EditorGUILayout.LabelField("Test", EditorStyles.boldLabel);
        numClients = EditorGUILayout.IntField("Number of Clients", numClients);
        if (lastBuildPresent == false)
        {
            GUI.enabled = false;
        }
        if (GUILayout.Button("Last Build"))
        {
            VRC_SdkBuilder.shouldBuildUnityPackage = false;
            VRC_SdkBuilder.numClientsToLaunch      = numClients;
            VRC_SdkBuilder.RunLastExportedSceneResource();
        }
        if (APIUser.CurrentUser.hasSuperPowers)
        {
            if (GUILayout.Button("Copy Test URL"))
            {
                TextEditor te = new TextEditor();
                te.text = lastUrl;
                te.SelectAll();
                te.Copy();
            }
        }
        if (lastBuildPresent == false)
        {
            GUI.enabled = true;
        }
        if (GUILayout.Button("New Build"))
        {
            EnvConfig.ConfigurePlayerSettings();
            VRC_SdkBuilder.shouldBuildUnityPackage = false;
            VRC.AssetExporter.CleanupUnityPackageExport();  // force unity package rebuild on next publish
            VRC_SdkBuilder.numClientsToLaunch = numClients;
            VRC_SdkBuilder.PreBuildBehaviourPackaging();
            VRC_SdkBuilder.ExportSceneResourceAndRun();
        }
        EditorGUILayout.EndVertical();
        EditorGUILayout.Space();
        EditorGUILayout.BeginVertical();
        EditorGUILayout.LabelField("Publish", EditorStyles.boldLabel);
        if (lastBuildPresent == false)
        {
            GUI.enabled = false;
        }
        if (GUILayout.Button("Last Build"))
        {
            if (APIUser.CurrentUser.canPublishWorlds)
            {
                VRC_SdkBuilder.shouldBuildUnityPackage = VRC.AccountEditorWindow.FutureProofPublishEnabled;
                VRC_SdkBuilder.UploadLastExportedSceneBlueprint();
            }
            else
            {
                ShowContentPublishPermissionsDialog();
            }
        }
        if (lastBuildPresent == false)
        {
            GUI.enabled = true;
        }
        if (GUILayout.Button("New Build"))
        {
            if (APIUser.CurrentUser.canPublishWorlds)
            {
                EnvConfig.ConfigurePlayerSettings();
                VRC_SdkBuilder.shouldBuildUnityPackage = VRC.AccountEditorWindow.FutureProofPublishEnabled;
                VRC_SdkBuilder.PreBuildBehaviourPackaging();
                VRC_SdkBuilder.ExportAndUploadSceneBlueprint();
            }
            else
            {
                ShowContentPublishPermissionsDialog();
            }
        }
        EditorGUILayout.EndVertical();
        GUI.enabled = true;
    }
Esempio n. 8
0
    void OnGUISceneCheck(VRCSDK2.VRC_SceneDescriptor scene)
    {
        CheckUploadChanges(scene);

        EditorGUILayout.InspectorTitlebar(true, scene.gameObject);

        if (VRC.Core.APIUser.CurrentUser != null && VRC.Core.APIUser.CurrentUser.hasScriptingAccess && !CustomDLLMaker.DoesScriptDirExist())
        {
            CustomDLLMaker.CreateDirectories();
        }

        Vector3 g = Physics.gravity;

        if (g.x != 0.0f || g.z != 0.0f)
        {
            OnGUIWarning(scene, "Gravity vector is not straight down. Though we support different gravity, player orientation is always 'upwards' so things don't always behave as you intend.");
        }
        if (g.y > 0)
        {
            OnGUIWarning(scene, "Gravity vector is not straight down, inverted or zero gravity will make walking extremely difficult.");
        }
        if (g.y == 0)
        {
            OnGUIWarning(scene, "Zero gravity will make walking extremely difficult, though we support different gravity, player orientation is always 'upwards' so this may not have the effect you're looking for.");
        }

        #if PLAYMAKER
        if (VRCSDK2.VRC_PlaymakerHelper.ValidatePlaymaker() == false)
        {
            OnGUIError(scene, VRCSDK2.VRC_PlaymakerHelper.GetErrors());
        }
        #endif

        if (!UpdateLayers.AreLayersSetup())
        {
            OnGUIError(scene, "Layers are not yet configured for VRChat. Please press the 'Setup Layers for VRChat' button above to apply layer settings and enable Test/Publish.");
        }

        if (UpdateLayers.AreLayersSetup() && !UpdateLayers.IsCollisionLayerMatrixSetup())
        {
            OnGUIError(scene, "Physics Collision Layer Matrix is not yet configured for VRChat. Please press the 'Setup Collision Layer Matrix for VRChat' button above to apply collision settings and enable Test/Publish.");
        }

        // warn those without scripting access if they choose to script locally
        if (VRC.Core.APIUser.CurrentUser != null && !VRC.Core.APIUser.CurrentUser.hasScriptingAccess && CustomDLLMaker.DoesScriptDirExist())
        {
            OnGUIWarning(scene, "Your account does not have permissions to upload custom scripts. You can test locally but need to contact VRChat to publish your world with scripts.");
        }

        foreach (VRCSDK2.VRC_DataStorage ds in GameObject.FindObjectsOfType <VRCSDK2.VRC_DataStorage>())
        {
            VRCSDK2.VRC_ObjectSync os = ds.GetComponent <VRCSDK2.VRC_ObjectSync>();
            if (os != null && os.SynchronizePhysics)
            {
                OnGUIWarning(scene, ds.name + " has a VRC_DataStorage and VRC_ObjectSync, with SynchronizePhysics enabled.");
            }
        }

        // auto create VRCScript dir for those with access
        if (VRC.Core.APIUser.CurrentUser != null && VRC.Core.APIUser.CurrentUser.hasScriptingAccess && !CustomDLLMaker.DoesScriptDirExist())
        {
            CustomDLLMaker.CreateDirectories();
        }

        if (scene.UpdateTimeInMS < (int)(1000f / 90f * 3f))
        {
            OnGUIWarning(scene, "Room has a very fast update rate; experience may suffer with many users.");
        }
    }
    void ShowImports()
    {
        //sdk images
        ImportImage = new GUIStyle
        {
            normal =
            {
                background = Resources.Load("ImportsImage") as Texture2D,
            },
            fixedHeight = 100
        };
        EditorTools = new GUIStyle
        {
            normal =
            {
                background = Resources.Load("EditorTools") as Texture2D,
            },
            fixedHeight = 100
        };
        PluginsImage = new GUIStyle
        {
            normal =
            {
                background = Resources.Load("PluginsImage") as Texture2D,
            },
            fixedHeight = 100
        };
        PrefabsImage = new GUIStyle
        {
            normal =
            {
                background = Resources.Load("PrefabsImage") as Texture2D,
            },
            fixedHeight = 100
        };
        ShaderImage = new GUIStyle
        {
            normal =
            {
                background = Resources.Load("ShaderImage") as Texture2D,
            },
            fixedHeight = 100
        };
        AvatarsImage = new GUIStyle
        {
            normal =
            {
                background = Resources.Load("AvatarsImage") as Texture2D,
            },
            fixedHeight = 100
        };
        OthersImages = new GUIStyle
        {
            normal =
            {
                background = Resources.Load("OthersImages") as Texture2D,
            },
            fixedHeight = 100
        };
        ADDImage = new GUIStyle
        {
            normal =
            {
                background = Resources.Load("ADDImage") as Texture2D,
            },
            fixedHeight = 100
        };
        GUI.backgroundColor = Color.white;
        GUILayout.Box("", ImportImage);
        GUI.backgroundColor = new Color(
            UnityEditor.EditorPrefs.GetFloat("SDKColor_R"),
            UnityEditor.EditorPrefs.GetFloat("SDKColor_G"),
            UnityEditor.EditorPrefs.GetFloat("SDKColor_B"),
            UnityEditor.EditorPrefs.GetFloat("SDKColor_A")
            );
        EditorGUILayout.BeginHorizontal(boxGuiStyle, GUILayout.Height(26));
        if (GUILayout.Button("The Black Arms Website"))
        {
            Application.OpenURL("https://trigon.systems/");
        }
        EditorGUILayout.EndHorizontal();
        EditorGUILayout.BeginHorizontal(boxGuiStyle, GUILayout.Height(26));
        if (GUILayout.Button("Latest SDX Release Page"))
        {
            Application.OpenURL("https://www.github.com/TheBlackArms/TheBlackArmsSDX/releases/latest");
        }
        if (GUILayout.Button("SDX Support Server"))
        {
            Application.OpenURL("https://discord.gg/A9dca3N");
        }
        EditorGUILayout.EndHorizontal();
        EditorGUILayout.BeginHorizontal(boxGuiStyle, GUILayout.Height(26));
        EditorGUILayout.LabelField("Click the asset to download EXTERNALLY", EditorStyles.boldLabel);
        EditorGUILayout.EndHorizontal();
        EditorGUILayout.BeginHorizontal(boxGuiStyle, GUILayout.Height(26));
        EditorGUILayout.LabelField("This requires importing from downloads", EditorStyles.boldLabel);
        EditorGUILayout.Space();
        EditorGUILayout.EndHorizontal();

        importsScroll = EditorGUILayout.BeginScrollView(importsScroll, GUILayout.Width(SdkWindowWidth));

        EditorGUILayout.BeginHorizontal(boxGuiStyle, GUILayout.Height(26));
        EditorGUILayout.LabelField("VRC Layers", EditorStyles.boldLabel);
        EditorGUILayout.LabelField("               (Adds VRC's collision layers)");
        if (GUILayout.Button("Add", GUILayout.Width(45)))
        {
            UpdateLayers.SetupEditorLayers();
        }
        EditorGUILayout.EndHorizontal();

        GUI.backgroundColor = Color.white;
        GUILayout.Box("", ADDImage);
        GUI.backgroundColor = new Color(
            UnityEditor.EditorPrefs.GetFloat("SDKColor_R"),
            UnityEditor.EditorPrefs.GetFloat("SDKColor_G"),
            UnityEditor.EditorPrefs.GetFloat("SDKColor_B"),
            UnityEditor.EditorPrefs.GetFloat("SDKColor_A")
            );

        EditorGUILayout.BeginHorizontal(boxGuiStyle, GUILayout.Height(26));
        if (GUILayout.Button("My Hero Academia Pack"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Addons/my_hero_academia_Pack.unitypackage");
        }
        if (GUILayout.Button("Old Stuff"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Addons/OldStuff.unitypackage");
        }
        if (GUILayout.Button("Basic Dark Theme"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Addons/Basic.Dark.TBA.SDX.Theme.Pack.unitypackage");
        }
        if (GUILayout.Button("SOA Theme"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Addons/Sons.of.Anarchy.TBA.SDX.Theme.Pack.unitypackage");
        }
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal(boxGuiStyle, GUILayout.Height(26));
        if (GUILayout.Button("Trash Gang Theme"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Addons/Trash.Gang.TBA.SDX.Theme.Pack.unitypackage");
        }
        if (GUILayout.Button("Classic Theme"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Addons/The.Black.Arms.SDX.Classic.Theme.Pack.unitypackage");
        }
        if (GUILayout.Button("Silence Theme"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Addons/Silence.TBA.SDX.Theme.Pack.unitypackage");
        }
        if (GUILayout.Button("Ministry Theme"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Addons/Ministry.TBA.SDX.Theme.Pack.unitypackage");
        }
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal(boxGuiStyle, GUILayout.Height(26));
        if (GUILayout.Button("Citizen Hack Theme"))
        {
            Application.OpenURL("https://github.com/TheBlackArms/TheBlackArmsSDX/releases/download/1.10.5/Citizen.Hack.TBA.SDX.Theme.Pack.unitypackage");
        }
        EditorGUILayout.EndHorizontal();

        GUI.backgroundColor = Color.white;
        GUILayout.Box("", EditorTools);
        GUI.backgroundColor = new Color(
            UnityEditor.EditorPrefs.GetFloat("SDKColor_R"),
            UnityEditor.EditorPrefs.GetFloat("SDKColor_G"),
            UnityEditor.EditorPrefs.GetFloat("SDKColor_B"),
            UnityEditor.EditorPrefs.GetFloat("SDKColor_A")
            );

        EditorGUILayout.BeginHorizontal(boxGuiStyle, GUILayout.Height(26));
        if (GUILayout.Button("Unity Dark Mode"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/EditorTools/UnityDarkSkin.App.zip");
        }
        if (GUILayout.Button("Sentinel Importer"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/EditorTools/SentinelsImporter.unitypackage");
        }
        if (GUILayout.Button("BitAnimator"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/EditorTools/BitAnimator.unitypackage");
        }
        if (GUILayout.Button("ReroEditorScripts"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/EditorTools/ReroEditorScripts.unitypackage");
        }
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal(boxGuiStyle, GUILayout.Height(26));
        if (GUILayout.Button("QHierarchy"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/EditorTools/QHierarchy.unitypackage");
        }
        if (GUILayout.Button("PlayModeSaver"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/EditorTools/PlayModeSaver.unitypackage");
        }
        if (GUILayout.Button("MuscleAnimator"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/EditorTools/MuscleAnimator.unitypackage");
        }
        if (GUILayout.Button("Pumkins Avatar Tools v0.8.1b"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/EditorTools/PumkinsAvatarTools_v0.8.1b.unitypackage");
        }
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal(boxGuiStyle, GUILayout.Height(26));
        if (GUILayout.Button("Unity FBXExporter"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/EditorTools/Unity_FBXExporter.unitypackage");
        }
        if (GUILayout.Button("VRC Avatar Editor"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/EditorTools/VRCAvatarEditor_beta_v0.3.0.1.unitypackage");
        }
        if (GUILayout.Button("VRChat Developer Tool"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/EditorTools/VRCDeveloperTool_20200621.unitypackage");
        }
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal(boxGuiStyle, GUILayout.Height(26));
        if (GUILayout.Button("VRChat Avatar 3.0 Tools"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/EditorTools/VRCAvatars3Tools_20200809.unitypackage");
        }
        if (GUILayout.Button("Mesh Delete With Texture"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/EditorTools/MeshDeleterWithTexture_v0.6.1b.zip");
        }
        if (GUILayout.Button("Model Bone Deleter"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/EditorTools/ModelBoneDeleter_v1.1.3.zip");
        }
        EditorGUILayout.EndHorizontal();
        GUI.backgroundColor = Color.white;
        GUILayout.Box("", PluginsImage);
        GUI.backgroundColor = new Color(
            UnityEditor.EditorPrefs.GetFloat("SDKColor_R"),
            UnityEditor.EditorPrefs.GetFloat("SDKColor_G"),
            UnityEditor.EditorPrefs.GetFloat("SDKColor_B"),
            UnityEditor.EditorPrefs.GetFloat("SDKColor_A")
            );

        EditorGUILayout.BeginHorizontal(boxGuiStyle, GUILayout.Height(26));
        if (GUILayout.Button("DynamicBones 1.2.1"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Plugins/DynamicBone_1.2.1.unitypackage");
        }
        if (GUILayout.Button("Final IK v1.9"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Plugins/Final_IK_v1.9.unitypackage");
        }
        if (GUILayout.Button("Post Processing Stuff"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Plugins/Post_ProcessingStack_v2.unitypackage");
        }
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal(boxGuiStyle, GUILayout.Height(26));
        if (GUILayout.Button("Inventory System"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Plugins/VRChat-InventorySystem-0.1.0c.zip");
        }
        if (GUILayout.Button("Button Inventory"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Plugins/button_inventory.unitypackage");
        }
        EditorGUILayout.EndHorizontal();

        GUI.backgroundColor = Color.white;
        GUILayout.Box("", PrefabsImage);
        GUI.backgroundColor = new Color(
            UnityEditor.EditorPrefs.GetFloat("SDKColor_R"),
            UnityEditor.EditorPrefs.GetFloat("SDKColor_G"),
            UnityEditor.EditorPrefs.GetFloat("SDKColor_B"),
            UnityEditor.EditorPrefs.GetFloat("SDKColor_A")
            );

        EditorGUILayout.BeginHorizontal(boxGuiStyle, GUILayout.Height(26));
        if (GUILayout.Button("LC Particle Overenderer"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Prefabs/LC_S_OVERENDER.unitypackage");
        }
        if (GUILayout.Button("LC Particle"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Prefabs/LCPARTICLE.unitypackage");
        }
        if (GUILayout.Button("Spring Joint"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Prefabs/4112_Spring_joint_thing.unitypackage");
        }
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal(boxGuiStyle, GUILayout.Height(26));
        if (GUILayout.Button("NanoSDK Particle Shader Sphere"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Prefabs/nanoSDK_ParticleShaderSpherePrefab.unitypackage");
        }
        if (GUILayout.Button("NanoSDK World Audio"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Prefabs/nanoSDK_WorldAudioPrefab.unitypackage");
        }
        if (GUILayout.Button("Armband"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Prefabs/Armband_G_V1.2.unitypackage");
        }
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal(boxGuiStyle, GUILayout.Height(26));
        if (GUILayout.Button("SDK_PREFABS"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Prefabs/SDK_PREFABS.unitypackage");
        }
        if (GUILayout.Button("WorldFixedIK"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Prefabs/WorldFixedIK.unitypackage");
        }
        if (GUILayout.Button("Inventory System Scripts"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Prefabs/InventorySysPrefabEdited.unitypackage");
        }
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal(boxGuiStyle, GUILayout.Height(26));
        if (GUILayout.Button("Dynamic Bones Prefabs"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Prefabs/DBP.unitypackage");
        }
        if (GUILayout.Button("Distraction"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Prefabs/7488%20VRChat%20Screenspace%20Prefab%20-%20Henry%20Distracted%20You.unitypackage");
        }
        EditorGUILayout.EndHorizontal();

        GUI.backgroundColor = Color.white;
        GUILayout.Box("", ShaderImage);
        GUI.backgroundColor = new Color(
            UnityEditor.EditorPrefs.GetFloat("SDKColor_R"),
            UnityEditor.EditorPrefs.GetFloat("SDKColor_G"),
            UnityEditor.EditorPrefs.GetFloat("SDKColor_B"),
            UnityEditor.EditorPrefs.GetFloat("SDKColor_A")
            );

        EditorGUILayout.BeginHorizontal(boxGuiStyle, GUILayout.Height(26));
        if (GUILayout.Button("PhoenixAceVFX Shader Pack !Very Old!"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Shaders/PhoenixAceVFX_Shader_Pack.unitypackage");
        }
        if (GUILayout.Button("ReroStandard"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Shaders/ReroStandard.unitypackage");
        }
        if (GUILayout.Button("RealToon"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Shaders/RealToon_5.2.1.unitypackage");
        }
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal(boxGuiStyle, GUILayout.Height(26));
        if (GUILayout.Button("3D Parallax Eye"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Shaders/3D_Parallax_eye_Shader_Fixed.unitypackage");
        }
        if (GUILayout.Button("Doppelganger MetallicFX 5.11"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Shaders/Doppelganger_Distortion_wave_3D.unitypackage");
        }
        if (GUILayout.Button("Poiyomi Toon Latest"))
        {
            Application.OpenURL("https://github.com/poiyomi/PoiyomiToonShader/releases/latest");
        }
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal(boxGuiStyle, GUILayout.Height(26));
        if (GUILayout.Button("Mochie's Uber Shader 1.4"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Shaders/Mochies.Uber.Shader.v1.4.unitypackage");
        }
        if (GUILayout.Button("Mochie's Nameplate 1.1"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Shaders/Mochies_Nameplates_v1.1.unitypackage");
        }
        if (GUILayout.Button("Mochie's Screen FX"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Shaders/Mochies_Screen_FX_v1.5.unitypackage");
        }
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal(boxGuiStyle, GUILayout.Height(26));
        if (GUILayout.Button("YourXelf Overlay"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Shaders/YourXelf_Overlay.unitypackage");
        }
        if (GUILayout.Button("ZalgoBLYAT"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Shaders/ZalgoBLYAT.unitypackage");
        }
        if (GUILayout.Button("Start Sphere V5"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Shaders/StartSphereV5.shader");
        }
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal(boxGuiStyle, GUILayout.Height(26));
        if (GUILayout.Button("Another Shader Pack"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Shaders/All%20Shaders.zip");
        }
        if (GUILayout.Button("Riot Fur"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Shaders/Riots_Furshader.rar");
        }
        if (GUILayout.Button("Corpse Laser"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Shaders/Corpse_Lazer_Shader_v1.5.unitypackage");
        }
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal(boxGuiStyle, GUILayout.Height(26));
        if (GUILayout.Button("Doppelganger Distortion wave 3D"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Shaders/Doppelganger_Distortion_wave_3D.unitypackage");
        }
        if (GUILayout.Button("Equation 90HZ"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Shaders/7481%2090Hz%20Equation%20Shader%20v11.unitypackage");
        }
        if (GUILayout.Button("Dissolve Glasses 90HZ"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Shaders/7385%2090Hz%20Dissolve%20Glasses%20shader%20v14.unitypackage");
        }
        EditorGUILayout.EndHorizontal();

        GUI.backgroundColor = Color.white;
        GUILayout.Box("", AvatarsImage);
        GUI.backgroundColor = new Color(
            UnityEditor.EditorPrefs.GetFloat("SDKColor_R"),
            UnityEditor.EditorPrefs.GetFloat("SDKColor_G"),
            UnityEditor.EditorPrefs.GetFloat("SDKColor_B"),
            UnityEditor.EditorPrefs.GetFloat("SDKColor_A")
            );

        EditorGUILayout.BeginHorizontal(boxGuiStyle, GUILayout.Height(26));
        if (GUILayout.Button("Gecko"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Avatars/Gecko.unitypackage");
        }
        if (GUILayout.Button("YBot Chain"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Avatars/YBot_Chain.unitypackage");
        }
        if (GUILayout.Button("Loading Avatar"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Avatars/Loading_Avatar_Update.unitypackage");
        }
        if (GUILayout.Button("Lewd Avatars"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Avatars/lewd_avatars_by_oddest.rar");
        }
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal(boxGuiStyle, GUILayout.Height(26));
        if (GUILayout.Button("Zed bot"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Avatars/Zed_bot.FBX");
        }
        if (GUILayout.Button("X-Bot Fixed"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Avatars/X_Bot.fbx");
        }
        if (GUILayout.Button("VBot V2"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Avatars/VBOT_V2_base.fbx");
        }
        if (GUILayout.Button("Corpse loading avatar"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Avatars/Corpse_Loading_Avatar_V7.unitypackage");
        }
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal(boxGuiStyle, GUILayout.Height(26));
        if (GUILayout.Button("YBot With Shapekeys"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Avatars/YBot_Visemes_-_Eyetracking_-_Blinking.unitypackage");
        }
        if (GUILayout.Button("YBot"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Avatars/YBot.unitypackage");
        }
        if (GUILayout.Button("XBot"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Avatars/X_Bot.fbx");
        }
        if (GUILayout.Button("Nikei"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Avatars/Nikei.unitypackage");
        }
        if (GUILayout.Button("Kyle Base"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Avatars/Kyle_Base.unitypackage");
        }
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal(boxGuiStyle, GUILayout.Height(26));
        if (GUILayout.Button("YBot Base"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Avatars/YBotBase.fbx");
        }
        if (GUILayout.Button("VRPill"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Avatars/VRPill.unitypackage");
        }
        if (GUILayout.Button("[REDACTED] Bot"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Avatars/Nigger_Bot.unitypackage");
        }
        if (GUILayout.Button("V-bot V3.0"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Avatars/7092_Corpse_V-Bot_30_Public.unitypackage");
        }
        if (GUILayout.Button("Asuka Langley"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Avatars/6608%20Asuka%20Langley.unitypackage");
        }
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal(boxGuiStyle, GUILayout.Height(26));
        if (GUILayout.Button("Clown Girl"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Avatars/7430%20Clown%20Girl%20Honoka.unitypackage");
        }
        if (GUILayout.Button("Warlock Miku & Luka"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Avatars/7402%20Warlock%20-%20miku%20and%20luka.unitypackage");
        }
        if (GUILayout.Button("Kemono Fox"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Avatars/7377%20Kemono%20Fox.unitypackage");
        }
        if (GUILayout.Button("TDA Miku Pack"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Avatars/7327%20TDA%20Miku%20Pack%20Part%202%20Converted%20MMD%20Models.unitypackage");
        }
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal(boxGuiStyle, GUILayout.Height(26));
        if (GUILayout.Button("Matt"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Avatars/7501%20Matt%20from%20wii%20sports%20rigged.unitypackage");
        }
        if (GUILayout.Button("Kiryu"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Avatars/7440%20Kiryu%20From%20Yakuza%200%20Happy%20Gesture%20Baka%20Mitai%20Singing%20Gesture.unitypackage");
        }
        if (GUILayout.Button("Basic EBoy"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Avatars/7407%20Basic%20EBoy%20%20PsychoUpdates.unitypackage");
        }
        if (GUILayout.Button("Hylotl Starbound"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Avatars/7363%20Hylotl%20Starbound%20-%20Facerig.unitypackage");
        }
        EditorGUILayout.EndHorizontal();

        GUI.backgroundColor = Color.white;
        GUILayout.Box("", OthersImages);
        GUI.backgroundColor = new Color(
            UnityEditor.EditorPrefs.GetFloat("SDKColor_R"),
            UnityEditor.EditorPrefs.GetFloat("SDKColor_G"),
            UnityEditor.EditorPrefs.GetFloat("SDKColor_B"),
            UnityEditor.EditorPrefs.GetFloat("SDKColor_A")
            );

        EditorGUILayout.BeginHorizontal(boxGuiStyle, GUILayout.Height(26));
        if (GUILayout.Button("Roblox Mad"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Extras/Roblox_Mad.unitypackage");
        }
        if (GUILayout.Button("Thicc Putin"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Extras/PUTIN.unitypackage");
        }
        if (GUILayout.Button("Aftermath"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Extras/7487%20Aftermath%20VIDEO%20PREFAB.unitypackage");
        }
        if (GUILayout.Button("Anime"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Extras/7519%20Anime%20Video%20Prefab.unitypackage");
        }
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal(boxGuiStyle, GUILayout.Height(26));
        if (GUILayout.Button("Distraction Dance"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Extras/7489%20Henry%20Stickmin%20Distraction%20Animation.unitypackage");
        }
        if (GUILayout.Button("Car Shearer Dance"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Extras/7470%20Car%20shearer%20Dance%20Animation.unitypackage");
        }
        if (GUILayout.Button("Goopie Dance"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Extras/7479%20Goopies%20Dance%20Animation.unitypackage");
        }
        if (GUILayout.Button("Stick Bugg"))
        {
            Application.OpenURL("https://trigon.systems/all-sdk/assets/Extras/7447%20Stick%20Bugg.unitypackage");
        }
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal(boxGuiStyle, GUILayout.Height(26));
        if (GUILayout.Button("Animation Pack"))
        {
            Application.OpenURL("https://vrcmods.com/item/1029");
        }
        if (GUILayout.Button("Stick Boned"))
        {
            Application.OpenURL("https://vrcmods.com/item/7462");
        }
        if (GUILayout.Button("RSL Anim Pack"))
        {
            Application.OpenURL("https://vrcmods.com/item/7405");
        }
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal(boxGuiStyle, GUILayout.Height(26));
        if (GUILayout.Button("Persona 4 Specialist"))
        {
            Application.OpenURL("https://vrcmods.com/item/7445");
        }
        if (GUILayout.Button("Galaxy Skybox"))
        {
            Application.OpenURL("https://vrcmods.com/item/7381");
        }
        if (GUILayout.Button("CSGO Knives"))
        {
            Application.OpenURL("https://vrcmods.com/item/7279");
        }
        if (GUILayout.Button("ThunderGun"))
        {
            Application.OpenURL("https://vrcmods.com/item/7252");
        }
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal();
        if (GUILayout.Button("Reaching The Stars"))
        {
            Application.OpenURL("https://www.mediafire.com/file/co2tq75vj5vc5bl/Reaching_The_Stars_Prefab.unitypackage/file");
        }
        if (GUILayout.Button("Mortals"))
        {
            Application.OpenURL("https://vrcmods.com/item/7852");
        }
        if (GUILayout.Button("Hijacked"))
        {
            Application.OpenURL("https://vrcmods.com/item/7664");
        }
        if (GUILayout.Button("Senko HBFS"))
        {
            Application.OpenURL("http://www.mediafire.com/file/6rwa87ioy0siywp/Senko+Anim+Video+Prefab.unitypackage/file");
        }
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.EndScrollView();
        GUILayout.FlexibleSpace();

        GUILayout.BeginVertical(boxGuiStyle, GUILayout.Height(20));
        GUILayout.FlexibleSpace();
        EditorGUILayout.LabelField("Import Menu Made By TheGamingBram", EditorStyles.boldLabel);

        GUILayout.EndVertical();
    }
Esempio n. 10
0
        public static void ExportCurrentSceneResource()
        {
            //IL_001e: Unknown result type (might be due to invalid IL or missing references)
            //IL_0023: Unknown result type (might be due to invalid IL or missing references)
            //IL_00b7: Unknown result type (might be due to invalid IL or missing references)
            //IL_00bc: Unknown result type (might be due to invalid IL or missing references)
            //IL_00e7: Unknown result type (might be due to invalid IL or missing references)
            //IL_00f9: Unknown result type (might be due to invalid IL or missing references)
            //IL_0104: Unknown result type (might be due to invalid IL or missing references)
            //IL_0109: Unknown result type (might be due to invalid IL or missing references)
            //IL_017f: Unknown result type (might be due to invalid IL or missing references)
            //IL_0184: Unknown result type (might be due to invalid IL or missing references)
            //IL_0186: Unknown result type (might be due to invalid IL or missing references)
            //IL_018b: Unknown result type (might be due to invalid IL or missing references)
            //IL_0193: Unknown result type (might be due to invalid IL or missing references)
            //IL_019e: Unknown result type (might be due to invalid IL or missing references)
            //IL_01a0: Unknown result type (might be due to invalid IL or missing references)
            object text;

            if (EditorPrefs.HasKey("originalScenePath"))
            {
                text = EditorPrefs.GetString("originalScenePath");
            }
            else
            {
                Scene activeScene = SceneManager.GetActiveScene();
                text = activeScene.get_path();
            }
            string path = (string)text;
            string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(path);
            string text2 = null;

            VRC_SceneDescriptor[] array = Tools.FindSceneObjectsOfTypeAll <VRC_SceneDescriptor>();
            if (array == null || array.Length != 1)
            {
                EditorUtility.DisplayDialog("Build Custom Scene", "Scene needs exactly one VRC_SceneDescriptor", "Ok");
            }
            else
            {
                VRC_SceneDescriptor val = array[0];
                if (val == null)
                {
                    EditorUtility.DisplayDialog("Build Custom Scene", "You must place a VRC_SceneDescriptor on the root of you custom scene", "Ok");
                }
                else if (val.spawns.Length < 1)
                {
                    EditorUtility.DisplayDialog("Build Custom Scene", "You must add at least one spawn to spawns in your VRC_SceneDescriptor.", "Ok");
                }
                else
                {
                    FindDynamicContent(val);
                    val.gravity           = Physics.get_gravity();
                    val.layerCollisionArr = UpdateLayers.GetLayerCollisionArray();
                    val.unityVersion      = Application.get_unityVersion();
                    EditorUtility.SetDirty(val);
                    EditorSceneManager.MarkSceneDirty(val.get_gameObject().get_scene());
                    EditorSceneManager.SaveScene(val.get_gameObject().get_scene());
                    try
                    {
                        Scene  activeScene2 = SceneManager.GetActiveScene();
                        string text3        = activeScene2.get_path();
                        string text4        = fileNameWithoutExtension;
                        bool   flag         = false;
                        if (text4.Contains("."))
                        {
                            flag = true;
                            string text5 = "Assets/customTmpScene12345.unity";
                            AssetDatabase.CopyAsset(text3, text5);
                            text3 = text5;
                            AssetDatabase.Refresh();
                        }
                        AssetDatabase.RemoveUnusedAssetBundleNames();
                        string        text6  = "customscene.vrcw";
                        AssetImporter atPath = AssetImporter.GetAtPath(text3);
                        atPath.set_assetBundleName(text6);
                        atPath.SaveAndReimport();
                        text2 = Application.get_temporaryCachePath() + "/" + text6;
                        BuildTarget      activeBuildTarget        = EditorUserBuildSettings.get_activeBuildTarget();
                        BuildTargetGroup selectedBuildTargetGroup = EditorUserBuildSettings.get_selectedBuildTargetGroup();
                        BuildPipeline.BuildAssetBundles(Application.get_temporaryCachePath(), 0, EditorUserBuildSettings.get_activeBuildTarget());
                        EditorUserBuildSettings.SwitchActiveBuildTarget(selectedBuildTargetGroup, activeBuildTarget);
                        EditorPrefs.SetString("currentBuildingAssetBundlePath", text2);
                        EditorPrefs.SetString("lastVRCPath", text2);
                        atPath.set_assetBundleName(string.Empty);
                        atPath.SaveAndReimport();
                        if (flag)
                        {
                            AssetDatabase.DeleteAsset(text3);
                        }
                        AssetDatabase.RemoveUnusedAssetBundleNames();
                    }
                    catch (Exception ex)
                    {
                        Debug.LogError((object)("Export Exception - " + ex.ToString()));
                        throw ex;
                        IL_0205 :;
                    }
                    if (text2 != null)
                    {
                        VRC_Editor.RecordActivity("scene", Path.GetFileName(text2));
                    }
                }
            }
        }
Esempio n. 11
0
        private static void SetupBasicPostProcessing(VRC_SceneDescriptor descriptor)
        {
#if UNITY_POST_PROCESSING_STACK_V2
            if (!UpdateLayers.AreLayersSetup())
            {
                EditorUtility.DisplayDialog("Layers Missing", "Start by setting up your layers in the VRCSDK builder tab", "OK");
            }
            else
            {
                if (EditorUtility.DisplayDialog("Setup Post Processing?", "This will setup your scenes Reference Camera and make a new global volume using the included example Post Processing Profile", "OK", "Cancel"))
                {
                    //Check if reference camera exists
                    if (!descriptor.ReferenceCamera)
                    {
                        if (Camera.main == null)
                        {
                            GameObject camera = new GameObject("Main Camera");
                            camera.AddComponent <Camera>();
                            camera.AddComponent <AudioListener>();
                            camera.tag = "MainCamera";
                        }
                        descriptor.ReferenceCamera = Camera.main.gameObject;
                    }

                    //Use PostProcessing layer if it exists otherwise use Water
                    var layer = LayerMask.NameToLayer("PostProcessing") > -1 ? "PostProcessing" : "Water";

                    //Make sure the Post Process Layer exists and set it up
                    if (!descriptor.ReferenceCamera.gameObject.GetComponent <PostProcessLayer>())
                    {
                        descriptor.ReferenceCamera.gameObject.AddComponent(typeof(PostProcessLayer));
                    }
                    var postprocessLayer = descriptor.ReferenceCamera.gameObject.GetComponent(typeof(PostProcessLayer)) as PostProcessLayer;
                    postprocessLayer.volumeLayer = LayerMask.GetMask(layer);

                    //Copy the example profile to the Post Processing folder
                    if (!Directory.Exists("Assets/Post Processing"))
                    {
                        AssetDatabase.CreateFolder("Assets", "Post Processing");
                    }
                    if (AssetDatabase.LoadAssetAtPath("Assets/Post Processing/SilentProfile.asset", typeof(PostProcessProfile)) == null)
                    {
                        var path = AssetDatabase.GUIDToAssetPath("eaac6f7291834264f97854154e89bf76");
                        if (path != null)
                        {
                            AssetDatabase.CopyAsset(path, "Assets/Post Processing/SilentProfile.asset");
                        }
                    }

                    //Set up the post process volume
                    var volume = GameObject.Instantiate(PostProcessManager.instance.QuickVolume(16, 100f));
                    if (File.Exists("Assets/Post Processing/SilentProfile.asset"))
                    {
                        volume.sharedProfile = (PostProcessProfile)AssetDatabase.LoadAssetAtPath("Assets/Post Processing/SilentProfile.asset", typeof(PostProcessProfile));
                    }
                    volume.gameObject.name  = "Post Processing Volume";
                    volume.gameObject.layer = LayerMask.NameToLayer(layer);

                    //Mark the scene as dirty for saving
                    EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene());
                }
            }
#endif
        }