void OnGUIScene() { GUILayout.Label("", VRCSdkControlPanel.scrollViewSeparatorStyle); _builderScrollPos = GUILayout.BeginScrollView(_builderScrollPos, false, false, GUIStyle.none, GUI.skin.verticalScrollbar, GUILayout.Width(VRCSdkControlPanel.SdkWindowWidth), GUILayout.MinHeight(217)); GUILayout.BeginVertical(VRCSdkControlPanel.boxGuiStyle, GUILayout.Width(VRCSdkControlPanel.SdkWindowWidth)); GUILayout.BeginHorizontal(); GUILayout.BeginVertical(GUILayout.Width(300)); EditorGUILayout.Space(); GUILayout.Label("Local Testing", VRCSdkControlPanel.infoGuiStyle); GUILayout.Label( "Before uploading your world you may build and test it in the VRChat client. You won't be able to invite anyone from online but you can launch multiple of your own clients.", VRCSdkControlPanel.infoGuiStyle); GUILayout.EndVertical(); GUILayout.BeginVertical(GUILayout.Width(200)); EditorGUILayout.Space(); _numClients = EditorGUILayout.IntField("Number of Clients", _numClients, GUILayout.MaxWidth(190)); EditorGUILayout.Space(); _forceNoVr = EditorGUILayout.Toggle("Force Non-VR", _forceNoVr, GUILayout.MaxWidth(190)); EditorGUILayout.Space(); GUI.enabled = _builder.NoGuiErrorsOrIssues(); string lastUrl = VRC_SdkBuilder.GetLastUrl(); bool lastBuildPresent = lastUrl != null; if (lastBuildPresent == false) { GUI.enabled = false; } if (VRCSettings.Get().DisplayAdvancedSettings) { if (GUILayout.Button("Last Build")) { VRC_SdkBuilder.shouldBuildUnityPackage = false; VRC_SdkBuilder.SetNumClients(_numClients); VRC_SdkBuilder.forceNoVR = _forceNoVr; VRC_SdkBuilder.RunLastExportedSceneResource(); } if (Core.APIUser.CurrentUser.hasSuperPowers) { if (GUILayout.Button("Copy Test URL")) { TextEditor te = new TextEditor { text = lastUrl }; te.SelectAll(); te.Copy(); } } } GUI.enabled = _builder.NoGuiErrorsOrIssues() || Core.APIUser.CurrentUser.developerType == Core.APIUser.DeveloperType.Internal; #if UNITY_ANDROID EditorGUI.BeginDisabledGroup(true); #endif if (GUILayout.Button("Build & Test")) { bool buildTestBlocked = !VRCBuildPipelineCallbacks.OnVRCSDKBuildRequested(VRCSDKRequestedBuildType.Scene); if (!buildTestBlocked) { #if VRC_SDK_VRCSDK2 EnvConfig.ConfigurePlayerSettings(); VRC_SdkBuilder.shouldBuildUnityPackage = false; AssetExporter.CleanupUnityPackageExport(); // force unity package rebuild on next publish VRC_SdkBuilder.SetNumClients(_numClients); VRC_SdkBuilder.forceNoVR = _forceNoVr; VRC_SdkBuilder.PreBuildBehaviourPackaging(); VRC_SdkBuilder.ExportSceneResourceAndRun(); #elif VRC_SDK_VRCSDK3 EnvConfig.ConfigurePlayerSettings(); VRC_SdkBuilder.shouldBuildUnityPackage = false; AssetExporter.CleanupUnityPackageExport(); // force unity package rebuild on next publish VRC_SdkBuilder.SetNumClients(_numClients); VRC_SdkBuilder.forceNoVR = _forceNoVr; VRC_SdkBuilder.PreBuildBehaviourPackaging(); VRC_SdkBuilder.ExportSceneResourceAndRun(); #endif } } #if UNITY_ANDROID EditorGUI.EndDisabledGroup(); #endif GUILayout.EndVertical(); if (Event.current.type != EventType.Used) { GUILayout.EndHorizontal(); EditorGUILayout.Space(); GUILayout.EndVertical(); } EditorGUILayout.Space(); GUILayout.BeginVertical(VRCSdkControlPanel.boxGuiStyle, GUILayout.Width(VRCSdkControlPanel.SdkWindowWidth)); GUILayout.BeginHorizontal(); GUILayout.BeginVertical(GUILayout.Width(300)); EditorGUILayout.Space(); GUILayout.Label("Online Publishing", VRCSdkControlPanel.infoGuiStyle); GUILayout.Label( "In order for other people to enter your world in VRChat it must be built and published to our game servers.", VRCSdkControlPanel.infoGuiStyle); EditorGUILayout.Space(); GUILayout.EndVertical(); GUILayout.BeginVertical(GUILayout.Width(200)); EditorGUILayout.Space(); if (lastBuildPresent == false) { GUI.enabled = false; } if (VRCSettings.Get().DisplayAdvancedSettings) { if (GUILayout.Button("Last Build")) { if (Core.APIUser.CurrentUser.canPublishWorlds) { EditorPrefs.SetBool("VRC.SDKBase_StripAllShaders", false); VRC_SdkBuilder.shouldBuildUnityPackage = VRCSdkControlPanel.FutureProofPublishEnabled; VRC_SdkBuilder.UploadLastExportedSceneBlueprint(); } else { VRCSdkControlPanel.ShowContentPublishPermissionsDialog(); } } } GUI.enabled = _builder.NoGuiErrorsOrIssues() || Core.APIUser.CurrentUser.developerType == Core.APIUser.DeveloperType.Internal; if (GUILayout.Button(VRCSdkControlPanel.GetBuildAndPublishButtonString())) { bool buildBlocked = !VRCBuildPipelineCallbacks.OnVRCSDKBuildRequested(VRCSDKRequestedBuildType.Scene); if (!buildBlocked) { if (Core.APIUser.CurrentUser.canPublishWorlds) { EnvConfig.ConfigurePlayerSettings(); EditorPrefs.SetBool("VRC.SDKBase_StripAllShaders", false); VRC_SdkBuilder.shouldBuildUnityPackage = VRCSdkControlPanel.FutureProofPublishEnabled; VRC_SdkBuilder.PreBuildBehaviourPackaging(); VRC_SdkBuilder.ExportAndUploadSceneBlueprint(); } else { VRCSdkControlPanel.ShowContentPublishPermissionsDialog(); } } } GUILayout.EndVertical(); GUI.enabled = true; if (Event.current.type == EventType.Used) { return; } GUILayout.EndHorizontal(); GUILayout.EndVertical(); GUILayout.EndScrollView(); }
public override void OnGUIAvatar(VRC_AvatarDescriptor avatar) { EditorGUILayout.BeginVertical(VRCSdkControlPanel.boxGuiStyle); EditorGUILayout.BeginHorizontal(); EditorGUILayout.BeginVertical(GUILayout.Width(300)); EditorGUILayout.Space(); GUILayout.Label("Offline Testing", VRCSdkControlPanel.infoGuiStyle); GUILayout.Label( "Before uploading your avatar you may build and test it in the VRChat client. Other users will not able to see the test avatar.", VRCSdkControlPanel.infoGuiStyle); EditorGUILayout.EndVertical(); EditorGUILayout.BeginVertical(GUILayout.Width(200)); EditorGUILayout.Space(); GUI.enabled = (EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneWindows || EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneWindows64) && (_builder.NoGuiErrorsOrIssues() || Core.APIUser.CurrentUser.developerType == Core.APIUser.DeveloperType.Internal); if (GUILayout.Button("Build & Test")) { if (Core.APIUser.CurrentUser.canPublishAvatars) { VRC_SdkBuilder.ExportAndTestAvatarBlueprint(avatar.gameObject); EditorUtility.DisplayDialog("VRChat SDK", "Test Avatar Built", "OK"); } else { VRCSdkControlPanel.ShowContentPublishPermissionsDialog(); } } EditorGUILayout.EndVertical(); EditorGUILayout.Space(); EditorGUILayout.EndHorizontal(); EditorGUILayout.EndVertical(); EditorGUILayout.Separator(); EditorGUILayout.BeginVertical(VRCSdkControlPanel.boxGuiStyle); EditorGUILayout.BeginHorizontal(); EditorGUILayout.BeginVertical(GUILayout.Width(300)); EditorGUILayout.Space(); GUILayout.Label("Online Publishing", VRCSdkControlPanel.infoGuiStyle); GUILayout.Label( "In order for other people to see your avatar in VRChat it must be built and published to our game servers.", VRCSdkControlPanel.infoGuiStyle); EditorGUILayout.EndVertical(); EditorGUILayout.BeginVertical(GUILayout.Width(200)); EditorGUILayout.Space(); GUI.enabled = _builder.NoGuiErrorsOrIssues() || Core.APIUser.CurrentUser.developerType == Core.APIUser.DeveloperType.Internal; if (GUILayout.Button(VRCSdkControlPanel.GetBuildAndPublishButtonString())) { bool buildBlocked = !VRCBuildPipelineCallbacks.OnVRCSDKBuildRequested(VRCSDKRequestedBuildType.Avatar); if (!buildBlocked) { if (Core.APIUser.CurrentUser.canPublishAvatars) { EnvConfig.FogSettings originalFogSettings = EnvConfig.GetFogSettings(); EnvConfig.SetFogSettings( new EnvConfig.FogSettings(EnvConfig.FogSettings.FogStrippingMode.Custom, true, true, true)); #if UNITY_ANDROID EditorPrefs.SetBool("VRC.SDKBase_StripAllShaders", true); #else EditorPrefs.SetBool("VRC.SDKBase_StripAllShaders", false); #endif VRC_SdkBuilder.shouldBuildUnityPackage = VRCSdkControlPanel.FutureProofPublishEnabled; VRC_SdkBuilder.ExportAndUploadAvatarBlueprint(avatar.gameObject); EnvConfig.SetFogSettings(originalFogSettings); // this seems to workaround a Unity bug that is clearing the formatting of two levels of Layout // when we call the upload functions return; } else { VRCSdkControlPanel.ShowContentPublishPermissionsDialog(); } } } EditorGUILayout.EndVertical(); EditorGUILayout.Space(); EditorGUILayout.EndHorizontal(); EditorGUILayout.EndVertical(); GUI.enabled = true; }