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