Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d Unity Editor是否可以在不重新加载脚本的情况下进入播放模式_Unity3d_Unity Editor - Fatal编程技术网

Unity3d Unity Editor是否可以在不重新加载脚本的情况下进入播放模式

Unity3d Unity Editor是否可以在不重新加载脚本的情况下进入播放模式,unity3d,unity-editor,Unity3d,Unity Editor,我正在编写一个Unity编辑器脚本,用于创建TCP服务器并接受来自其他应用程序的请求,但我发现“单击”播放模式会重新加载编辑器脚本,这将通过重新初始化服务器中断连接。Unity Editor是否有任何方法可以停止重新加载此特定脚本并使其始终运行 [InitializeOnLoadMethod] static void InitializeOnLoadMethod() { if (m_Server == null) {

我正在编写一个Unity编辑器脚本,用于创建TCP服务器并接受来自其他应用程序的请求,但我发现“单击”播放模式会重新加载编辑器脚本,这将通过重新初始化服务器中断连接。Unity Editor是否有任何方法可以停止重新加载此特定脚本并使其始终运行

    [InitializeOnLoadMethod]
    static void InitializeOnLoadMethod()
    {
        if (m_Server == null)
        {
            EditorApplication.update += Update;
            Debug.Log("starting");
            IPAddress ip = IPAddress.Parse(ipAdress);
            m_Server = new TcpListener(ip, port);
            m_Server.Start();
            Debug.Log("Sever started");
            Debug.Log(ip);
            Debug.Log(port);


            //Wait for async client connection 
            m_Server.BeginAcceptTcpClient(ClientConnected, null);
            OnServerStarted?.Invoke();
        }

换句话说,在调用PlayMode后,是否有办法保留所有静态变量和编辑器协同路由?我做了一些搜索,我认为域重新加载导致了它

没有尝试过这一点,也没有在这台电脑上进行Unity测试,但是您可以使用ISPlay检查来关闭它:


换句话说,不要在游戏玩的时候运行代码,这在你按Play按钮时是正确的?

实际上,我的目的是在游戏玩的时候启动服务器,但通过单击“Play”,它会重新加载我的所有脚本并重置我的所有静态变量。我尝试了你的方法,但不知何故,仍然在执行内部变量OK,所以我可能误解了,但是您希望在Unity首次启动时初始化服务器(因此使用InitializeOnLoadMethod),但不希望它在编辑器中重置这些变量,但您确实希望在打包的构建中初始化服务器?在这种情况下,您不能使用编辑器定义来删除编辑器中的代码吗
#if WITH_EDITOR if(!Application.isPlaying)#endif{///您的代码在这里}
(很抱歉,在这个回复中无法很好地格式化)实际上我刚刚意识到您使用的是静态变量。我认为在Unity中,编辑器和游戏环境之间不可能存在静态变量。我不知道Unity如何处理静态编辑器变量的具体细节,但也许这个线程会有用:是的……我找到了一种方法来避免使用两次初始化!EditorApplication.isPlayingOrWillChangePlaymode,但是我的静态变量(如客户端和服务器)在按下play以及我的编辑器协同程序后将丢失。。。我正在尝试构建一个服务器,它可以轻松地使用tcp连接播放/停止控制unity。我想我的问题是,在进入播放模式时,如何保持线程继续运行,同时保持静态变量。我认为您这样做是错误的。播放模式和编辑模式应该不同,它们应该相互隔离。所以最好重新考虑你的想法。看看这个
if (!Application.isPlaying)
{
    // Do your server stuff here
}