Unity3d 编辑器:如何防止更改在退出播放模式时被撤消?

Unity3d editor: how to prevent changes from being undone upon exiting play mode?

显然这是一些初学者的问题(我也是),但它让我发疯,我找不到任何提及:

我偶尔忘记退出播放模式并继续构建我的UI制作对象和更改,才意识到我仍然在 Play Mode 下,只要我按下播放按钮,这些就会被清除! 我想 Unity Editor 有它的在 播放模式 下允许编辑 Scripts/Scenes 的原因(很高兴听到一些例子——也许是测试场景?)但我的主要问题是:

有什么方法可以防止这种行为吗?或者至少有一些你用来防止 me 播放模式 下进行更改的技巧? (除了对此变得偏执并不断检查......)

谢谢

PS。 叹息 是时候回到 Unity 并重建我丢失的 UI...

其他 Unity 编码员在我之前遇到过这个问题,他们想出了一个巧妙的解决方案。 在播放模式 "Playmode tint".

中将 UI 设置为不同的颜色

您可以在此处阅读详细信息(最初发布于 2009 年,但我检查过它在最新的 Unity 5.3 中仍然有效):

http://answers.unity3d.com/questions/9159/best-strategies-for-not-accidently-editing-whilst.html

没有设置可以防止在播放模式期间更改内容,但有一些方法可以减少在播放模式期间丢失更改的机会。

1.编辑->首选项...-> 颜色。现在,将右侧的 Playmode Tint 更改为 red。这会提醒您正在更改播放模式。

2。单击您在游戏中更改的每个组件的齿轮图标,然后单击复制组件。完成播放模式后,select 您要保留其更改的组件。再次单击齿轮图标,这一次单击 粘贴组件值

3。编写一个可以为您完成此操作的编辑器插件。这很难但有可能。

进入播放模式时使用事件来查找。将所有 GameObject public 重要 变量(例如 transform/rigidbody 属性存储在列表中。

等待停止事件触发,然后询问您自己要将设置覆盖到哪些游戏对象。然后覆盖selected GameObjects的属性就是这样。

对此有用的 API:

EditorApplication.isPlaying
EditorApplication.isPaused
EditorApplication.isPlayingOrWillChangePlaymode
EditorApplication.playmodeStateChanged += callBackFunc;
EditorApplication.HierarchyWindowItemCallback
EditorApplication.ProjectWindowItemCallback

注意:根据Unity roadmap,一项可以让您保存播放时间更改的功能正在建设中,将很快发布,但以上似乎是目前唯一的办法。

您可以在播放模式下select要保留的对象,使用Ctrl + C复制它们,然后在返回编辑模式后使用Ctrl + V将它们粘贴回去。然后您可以从场景中删除原件或从@Programmer 建议的各个组件复制值。