如何退出独立模式或编辑器模式

2023-12-14

我在 Windows 10 64 位上使用 unity 5.4.1f1 Personal

我将解释我所做的所有步骤以及迄今为止我尝试过的所有事情。

我第一次使用原始代码创建了一个新的 c# 文件: 现在,当我按 Escape 键时,它将返回编辑器,但不会退出游戏!使用[InitializeOnLoad]时,您无法停止编辑器播放按钮并退出游戏。要退出游戏,您只能在独立模式下使用“构建并运行”来完成,然后您可以使用 Application.Quit();

using UnityEditor;
using UnityEngine;
using System.Collections;

[InitializeOnLoad]
public class FullscreenPlayMode : MonoBehaviour {

    //The size of the toolbar above the game view, excluding the OS border.
    private static int tabHeight = 22;

    static FullscreenPlayMode()
    {
        EditorApplication.playmodeStateChanged -= CheckPlayModeState;
        EditorApplication.playmodeStateChanged += CheckPlayModeState;

        EditorApplication.update += Update;

    }

    static void CheckPlayModeState()
    {
        if (EditorApplication.isPlaying)
        {
            FullScreenGameWindow();
        }
        else 
        {
            CloseGameWindow();
        }
    }

    static EditorWindow GetMainGameView(){
        EditorApplication.ExecuteMenuItem("Window/Game");

        System.Type T = System.Type.GetType("UnityEditor.GameView,UnityEditor");
        System.Reflection.MethodInfo GetMainGameView = T.GetMethod("GetMainGameView",System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static);
        System.Object Res = GetMainGameView.Invoke(null,null);
        return (EditorWindow)Res;
    }

    static void FullScreenGameWindow(){

        EditorWindow gameView = GetMainGameView();

        Rect newPos = new Rect(0, 0 - tabHeight, Screen.currentResolution.width, Screen.currentResolution.height + tabHeight);

        gameView.position = newPos;
        gameView.minSize = new Vector2(Screen.currentResolution.width, Screen.currentResolution.height + tabHeight);
        gameView.maxSize = gameView.minSize;
        gameView.position = newPos; 

    }

    static void CloseGameWindow(){
        EditorWindow gameView = GetMainGameView();
        gameView.Close();
    }

    static void Update()
    {
        if (Input.GetKey (KeyCode.Escape)) 
        {
            CloseGameWindow ();
        }
    }
}

然后,由于这不能按我想要的方式工作,所以我尝试了其他方法。 我删除了该行: [InitializeOnLoad] 但没有更改脚本其余部分中的任何其他内容。

这次删除行 [InitializeOnLoad] 后,我将脚本拖到 ThirdPersonController 中。

现在,如果我像以前一样从编辑器开始游戏并按转义键,它将返回编辑器但不会退出游戏!

但现在如果我在菜单“文件”>“构建并运行”中进行创建,我将收到两个错误:

Errors

第一个错误是:

Assets/MyScripts/FullScreenPlayMode.cs(1,7):错误CS0246:找不到类型或命名空间名称“UnityEditor”。您是否缺少 using 指令或程序集引用?

第二个错误:

由于脚本存在编译器错误,构建 Player 时出错

所以我找到了这个解决方案,这个链接中的解决方案应该是:

不起作用的解决方案

如果我将文件脚本移动到 EDITOR 目录,那么我无法将脚本拖动到 ThirdPersonController,它将抛出一条消息,表示该脚本是编辑器脚本。

如果我尝试了链接中的第二个解决方案:

#if UNITY_EDITOR
     // Editor specific code here
 #endif

所以我在顶部的脚本中做到了:

#if UNITY_EDITOR
using UnityEditor;
#endif

而且脚本文件不在Editor目录下! 这次当我进行“构建并运行”时,我收到了另一个新错误:

Assets/MyScripts/FullScreenPlayMode.cs(34,16):错误CS0246:找不到类型或命名空间名称“EditorWindow”。您是否缺少 using 指令或程序集引用?

无法找到 EditorWindow 的错误是什么。当我使用 #if 和 #endif 时会发生此错误

所以到目前为止我尝试过的所有方法都遇到了另一个问题。


我可能会简化你的问题,但你可以简单地这样做:

void Update()
{
    if (Input.GetKey(KeyCode.Escape))
    {
 #if UNITY_EDITOR
        if (EditorApplication.isPlaying)
        {
            EditorApplication.isPlaying = false;
        }

#else 
        Application.Quit();
#endif
        }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何退出独立模式或编辑器模式 的相关文章

  • 使用 ADAL v3 使用 ClientID 对 Dynamics 365 进行身份验证

    我正在尝试对我们的在线 Dynamics CRM 进行身份验证以使用可用的 API 我能找到的唯一关于执行此操作的官方文档是 https learn microsoft com en us dynamics365 customer enga
  • C#.Net 邮件将进入垃圾邮件文件夹

    我正在从 ASP net Web 应用程序发送电子邮件 邮件发送成功 没有失败 但大多数都进入了垃圾邮件文件夹 请帮助我克服垃圾邮件过滤器 我的发送邮件代码 public void SendMail string FromAddress s
  • C# 中的 Stack<> 实现

    我最近一直在实现递归目录搜索实现 并且使用堆栈来跟踪路径元素 当我使用 string Join 连接路径元素时 我发现它们被颠倒了 当我调试该方法时 我查看了堆栈 发现堆栈内部数组中的元素本身是相反的 即最近 Push 的元素位于内部数组的
  • 无法继承形状

    为什么我不能使用继承 a 的类Shapes class http msdn microsoft com en us library ms604615 28v vs 90 29 我需要延长Rectangle具有一些方法的类 但我想以与使用相同
  • 如何向 Mono.ZeroConf 注册服务?

    我正在尝试测试 ZeroConf 示例http www mono project com Mono Zeroconf http www mono project com Mono Zeroconf 我正在运行 OpenSuse 11 和 M
  • 为什么这个 makefile 在“make clean”上执行目标

    这是我当前的 makefile CXX g CXXFLAGS Wall O3 LDFLAGS TARGET testcpp SRCS main cpp object cpp foo cpp OBJS SRCS cpp o DEPS SRCS
  • JavaScript 错误:MVC2 视图中的条件编译已关闭

    我试图在 MVC2 视图页面中单击时调用 JavaScript 函数 a href Select a JavaScript 函数 function SelectBenefit id code alert id alert code 这里 b
  • C# 根据当前日期传递日期时间值

    我正在尝试根据 sql server 中的两个日期获取记录 Select from table where CreatedDate between StartDate and EndDate我通过了5 12 2010 and 5 12 20
  • 条件类型定义

    如果我有一小段这样的代码 template
  • 如何防止 Blazor NavLink 组件的默认导航

    从 Blazor 3 1 Preview 2 开始 应该可以防止默认导航行为 https devblogs microsoft com aspnet asp net core updates in net core 3 1 preview
  • 对于 C# Express 用户来说,有哪些好的工具可以识别可能重复的代码? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 也可以看看 有什么工具可以检查重复的 VB NET 代码吗 https stackoverflow c
  • ASP.NET Core 中间件与过滤器

    在阅读了 ASP NET Core 中间件之后 我对何时应该使用过滤器以及何时应该使用中间件感到困惑 因为它们似乎实现了相同的目标 什么时候应该使用中间件而不是过滤器 9频道有一个关于此的视频 ASP NET 怪物 91 中间件与过滤器 h
  • 以编程方式创建 Blob 存储容器

    我有一个要求 即在创建公司时 在我的 storageaccount 中创建关联的 blob 存储容器 并将容器名称设置为传入的字符串变量 我已尝试以下操作 public void AddCompanyStorage string subDo
  • Xamarin Forms Binding - 访问父属性

    我无法访问页面的 ViewModel 属性以便将其绑定到 IsVisible 属性 如果我不设置 BindingContext 我只能绑定它 有没有办法可以在设置 BindingContext 的同时访问页面的 viewmodel root
  • 在哪里可以找到 Microsoft.Build.Utilities.v3.5

    如何获取 Microsoft Build Utilities v3 5 我正在使用 StyleCop 4 7 Stylecop dll 中的 StyleCop msbuild 任务似乎依赖于 Microsoft Build Utilitie
  • C++ 指针引用混淆

    struct leaf int data leaf l leaf r struct leaf p void tree findparent int n int found leaf parent 这是 BST 的一段代码 我想问一下 为什么
  • 如何在C#中控制datagridview光标移动

    我希望 datagridview 光标向右移动到下一列 而不是在向单元格输入数据后移动到下一行 我试图通过 dataGridView1 KeyDown 事件捕获键来控制光标 但这并不能阻止光标在将数据输入到单元格后移动到下一行 提前感谢你的
  • C:设置变量范围内所有位的最有效方法

    让我们来int举个例子 int SetBitWithinRange const unsigned from const unsigned to To be implemented SetBitWithinRange应该返回一个int其中所有
  • 如何高效计算连续数的数字积?

    我正在尝试计算数字序列中每个数字的数字乘积 例如 21 22 23 98 99 将会 2 4 6 72 81 为了降低复杂性 我只会考虑 连续的数字 http simple wikipedia org wiki Consecutive in
  • Streamwriter 覆盖 txt 文件中的文本

    有没有什么方法可以重新打开流写入器而不创建新的写入对象 因为此时 当调用 WriteOdd 时 streamwriter 正在覆盖在它之前调用的 WriteEven public void WriteEven StreamWriter wr

随机推荐

  • 如何在 Linux 中将 boost 库添加到 Code::Blocks

    如何将 boost 库添加到 Linux Ubuntu 中的 Code Blocks 项目中 例如我想添加regex lib 我已经安装了 boost 库 sudo apt get install libboost all dev 完整示例
  • Android 和 libCurl https

    晚上好 我需要将 libCurl 实现到我们的 Android 项目之一中 我使用 JNI 通过 libCurl 代码调用 C 类 一切都很完美 但看在上帝的份上 我无法使用 https url 让它工作 我总是收到 CURLE UNSUP
  • Firebase:Cloud Firestore:listDocuments:文档读取成本 1 或 N?分布式计数器的可能替代方案?

    构建社交媒体应用程序并应对 1write doc sec 限制 因此 将投票数据保留在邮寄文档中将无法大规模发挥作用 我已阅读 分布式计数器 但文档读 写成本呈线性缩放 我一直在探索可用的 firebase 函数 并对 listDocume
  • 扩展 Core Data 生成的 NSManagedObject 类

    我第一次处理 Core Data 我想知道扩展 Xcode 为我的 NSManagedObject 实体生成的类的最佳实践是什么 I saw 发电机我也一直在使用与建议类似的方法超级快乐轻松获取核心数据 所以我有三种类型的课程 EasyFe
  • Fortran90 未分类语句 While 循环

    我正在尝试在 Fortran90 中运行一些代码片段 但在 while 语句中出现未分类语句错误 我在网上查了一下 找不到为什么 while 语句会发生这种情况 这是我收到的错误 Test f90 11 4 while R lt Minim
  • GCP - terraform 删除了所有政策,我该如何恢复

    我跟随地形运行 我使用时犯了一个错误google storage bucket iam policy代替google storage bucket iam binding因此 它没有添加新策略 而是替换了所有现有策略 data google
  • 从 .net 中的 xsd 架构文件中提取枚举值

    如何使用 net 以编程方式从 xsd 架构文件中提取元素的枚举约束值 例如 我想从以下 xsd 中提取 奥迪 高尔夫 和 宝马
  • 为 Angular 2 身份验证前端添加会话超时

    我已按照以下教程 1 为我的应用程序设置身份验证 现在我需要通过添加 Angular 2 前端的会话超时来修改身份验证 即 20 分钟后会话应过期并要求用户再次登录 我如何为我的身份验证系统开发此扩展功能 1 http jasonwatmo
  • PHPMailer 不支持 Gmail SMTP [关闭]

    Closed 这个问题需要调试细节 目前不接受答案 以下代码可以在我的 xampp 本地服务器上运行 但不能在远程主机上发送电子邮件 我收到此错误 邮件无法发送 Mailer 错误 SMTP 连接 失败 require once heade
  • ggplot 置信区间未填充我的线性混合模型的整个数据集

    my ggplot R code works perfectly ok with my other datasets but I m stumbled with why it s not working for one particular
  • 开发一个在用户使用 xcode 登录之前运行的 osx 守护进程

    您好 我正在尝试使用 Objective C xcode 开发一个守护进程 我是 mac 世界的新手 我可以了解在 Xcode 中选择什么项目模板以及如何操作吗 我可以获得简单且基本的守护程序示例源代码吗 命令行工具 项目足以开始编写守护程
  • 如何将 JAR 依赖项包含到 AAR 库中

    Summary 我有一个依赖于 JAR 文件的 AAR 文件 当我构建 AAR 项目时 它不包含 JAR 代码 Details 我有一个 Java SDK 库项目 其中包含我们用于 Java Web 项目等的代码 该库是使用创建的Gradl
  • 无法在某些 Android 手机上使用 SmsManager 发送短信

    我的移动应用程序偶尔会发送短信 在大多数手机上一切正常 但我开始收到一些用户发来的电子邮件 说明消息不会发出 这是我正在使用的代码 SmsManager sms SmsManager getDefault sms sendTextMessa
  • 更新:根据文件扩展名将文件从一个文件夹移动到另一个文件夹

    情况 我正在进行自动化操作 只需从一组文件中下载 CSV 文件 现在我只想将 CSV 文件从一个文件夹移动到另一个文件夹 问题 您能否向我提供代码 以便在移动文件后立即从源文件夹中删除文件 到目前为止 这是我的代码 public class
  • 当它用作自动热键中的热键时,如何将字母本身发送

    例如 我想按 v 通过自动热键获取 asdfv 但是当我定义如下时 v 发送 asdfv 脚本运行到无限循环 因为最后一个 v 被覆盖为快捷方式 所以问题是 我怎样才能得到我想要的东西 两种方式 UseHook On v send asdf
  • 在 UILabel/UITextView 中触摸单词

    我想做的是创建一个文本容器组件 该组件能够在触摸时指示最近的单词是什么 即触摸点 后面 的单词 首先 我创建了一个 UILabel 子类并重写 TouchesEnded withEvent 方法来确定触摸的 CGPoint 我还编写了一个方
  • 使用像 Spinner 这样的 jquery 增加文本输入的值

    尝试使用 Jquery 创建一个简单的旋转效果 即两个带有文本字段的按钮 向上和向下 向上按钮增加值 向下按钮减小值 增加步数 或 1 任何建议 如 ui spinner 都是最明确的 不工作 我是 jquery 新手 一定是这样的 up
  • 三星 Galaxy SIII 的相机是否存在缺陷?

    我使用以下代码启动相机 但是 有 3 4 的时间 照片没有保存到内存中 这种情况仅发生在 Galaxy SIII 上 它适用于 Nexus S 和 Nexus One public void photoNew holdingImage ge
  • 警告:内置函数“strlen”和“strcpy”的隐式声明不兼容[重复]

    这个问题在这里已经有答案了 我刚刚完成了我的刽子手游戏 作为最后一步 我正在进行一些代码清理和优化 但我似乎无法理解为什么我收到以下两个警告 警告 内置函数 strlen 的隐式声明不兼容 警告 内置函数 strcpy 的隐式声明不兼容 使
  • 如何退出独立模式或编辑器模式

    我在 Windows 10 64 位上使用 unity 5 4 1f1 Personal 我将解释我所做的所有步骤以及迄今为止我尝试过的所有事情 我第一次使用原始代码创建了一个新的 c 文件 现在 当我按 Escape 键时 它将返回编辑器