unity editorwindow模式下怎么知道属性被修改

& & & &一般我们想看看我们做好的项目在移动真机上的效果,那我们就需要打出相应的设备的***包进行***后才能看见效果。当我们稍微修改某个东西,再想看看效果,那又得打包。这样是不是觉得会有些麻烦。我觉得确实是有些麻烦。那好吧,现在通过UnityRemote就能在Editor下链接手机让我们看见在真机机上的效果了(约等于的效果)。可以通过在手机上操作,同时Unity也是会同步操作画面的, UnityRemote现在的版本已经是4了。
& & & UnityRemote到目前为止暂时尽支持2个平台: Android和iOS。 我现在说的一切都是在UnityRemote4上进行的。
Android&(在Windows 和OSX上都可通过USB来进行链接&)
iOS: iPhone, iPad, iPod touch (在Windows 和OSX上都可通过USB来进行链接; 但是必须需要&iTunes)
& & 想要测试 我们要满足2个条件,1是在unity中导入UnityRemote插件包,2是在手机上***UnityRemote的应用。
Unity 插件可在这下载:&
Android App:&
& & &官方的文档在这里:
& & 由于国内被墙的问题,也可以在这点击下载 ,里面包含UnityPackage和Android版UnityRemote
& &我是用安卓来测试的。
& & & 1.首先我已经在手机上***了UnityRemote4,我也在Unity中导入了UnityRemote4插件包。
& & & & & & & & & & & & & & &&
& 2.通过USB把手机和电脑链接上,然后打开手机上的UnityRemote程序。
& 3.在Unity中的Editor--Project Settings--Editor中的UnityRemote栏选择Device中的选项为相应的设备(我的是android)
& 4.然后点击Unity的运行的按钮,你就能在手机上看见效果了,同时你在手机上做相应的操作,也是会响应的,效果图。当我在手机上点击Log的时候也是会输出相应的信息的。
void OnGUI()
GUILayout.Space(20);
if (GUILayout.Button("Log", GUILayout.Width(100), GUILayout.Height(50)))
Debug.Log("Log");
else if (GUILayout.Button("LogWarning", GUILayout.Width(100), GUILayout.Height(50)))
Debug.LogWarning("LogWarning");
else if (GUILayout.Button("LogError", GUILayout.Width(100), GUILayout.Height(50)))
Debug.LogError("LogError");
& & & 吐槽时候到了。我起初以为这个是可以测试接了SDK的效果的,但是经过我测试,发现并非如我所想的一样,众所皆知,在接入SDK后来调试的时候是很麻烦的,都要打包到真机上运行才行。看来还是得用Eclipse来看测试打印信息了。
阅读(...) 评论() &我要留言技术领域:
你已经自动关注本知识库了哦!
确定要取消收藏吗?【Unity3D】用继承EditorUpdater类来实现Editor模式下的后台处理 - 秋乡暮雨 - 博客园
随笔 - 10, 文章 - 0, 评论 - 0, 引用 - 0
EditorWindow类的OnGUI函数只会在窗口焦点处于Editor窗口上的时候才会运行。如果希望焦点不在Editor窗口上的时候,它也能实时更新,可以实现以下方法:
OnDestroy is called when the EditorWindow is closed.
Called when the window gets keyboard focus.
Implement your own editor GUI here.
Called whenever the scene hierarchy has changed.
OnInspectorUpdate is called at 10 frames per second to give the inspector a chance to update.
Called when the window loses keyboard focus.
Called whenever the project has changed.
Called whenever the selection has changed.
Called multiple times per second on all visible windows.
但是,如果Editor窗口被贴到大窗口上后,选择和它平级的窗口,从而隐藏了Editor窗口,这样OnGUI函数仍然无法调用。所以,我们为了实现更有效的后台处理,可以采用继承一个自己写的EditorUpdate类的方式。
using System.C
using System.R
using UnityE
using UnityE
[InitializeOnLoad]
public class EditorMonoBehaviour
static EditorMonoBehaviour()
var type = Types.GetType ("UnityEditor.EditorAssemblies", "UnityEditor.dll");
var method = type.GetMethod("SubclassesOf",BindingFlags.Static|BindingFlags.NonPublic|BindingFlags.Instance,null,new Type[]{typeof(Type)},null);
var e = method.Invoke (null, new object[] { typeof(EditorMonoBehaviour) }) as IE
foreach (Type editorMonoBehaviourClass in e)
method = editorMonoBehaviourClass.BaseType.GetMethod ("OnEditorMonoBehaviour", BindingFlags.NonPublic | BindingFlags.Instance);
if (method != null)
method.Invoke (System.Activator.CreateInstance (editorMonoBehaviourClass), new object[0]);
private void OnEditorMonoBehaviour()
EditorApplication.update += U
EditorApplication.hierarchyWindowChanged += OnHierarchyWindowC
EditorApplication.hierarchyWindowItemOnGUI += HierarchyWindowItemOnGUI;
EditorApplication.projectWindowChanged += OnProjectWindowC
EditorApplication.projectWindowItemOnGUI += ProjectWindowItemOnGUI;
EditorApplication.modifierKeysChanged += OnModifierKeysC
EditorApplication.CallbackFunction function = () =& OnGlobalEventHandler (Event.current);
FieldInfo info = typeof(EditorApplication).GetField ("globalEventHandler", BindingFlags.Static | BindingFlags.Instance | BindingFlags.NonPublic);
EditorApplication.CallbackFunction functions = (EditorApplication.CallbackFunction)info.GetValue (null);
function +=
info.SetValue (null, (object)functions);
EditorApplication.searchChanged += OnSearchC
EditorApplication.playmodeStateChanged += () =& {
if(EditorApplication.isPaused)
OnPlaymodeStateChanged(PlayModeState.Paused);
if(EditorApplication.isPlaying)
OnPlaymodeStateChanged(PlayModeState.Playing);
if(EditorApplication.isPlayingOrWillChangePlaymode)
OnPlaymodeStateChanged(PlayModeState.PlayingOrWillChangePlayMode);
public virtual void Start()
public virtual void Update()
public virtual void OnHierarchyWindowChanged()
public virtual void HierarchyWindowItemOnGUI(int instanceID,Rect selectionRect)
public virtual void OnProjectWindowChanged()
public virtual void ProjectWindowItemOnGUI(string guid,Rect selectionRect)
public virtual void OnModifierKeysChanged()
public virtual void OnGlobalEventHandler(Event e)
public virtual void OnSearchChanged()
public virtual void OnPlaymodeStateChanged(PlayModeState playModeState)
public enum PlayModeState
PlayingOrWillChangePlayMode
然后在另一个脚本中继承这个类,并重载Start和Update等方法,在这些方法中实现后台逻辑,就可以后台更新了。
using UnityE
using System.C
public class UpdaterTest :EditorMonoBehaviour
public override void Update ()

参考资料

 

随机推荐