最近在处理酷跑类型游戏时,遇到一个功能需求:需要在摄像机实时追踪角色显示(Game)的同时,Scene同时实时显示NPC的位置状态等信息?

这个问题有三种解决方法,各有利弊:
1)使用unity系统内置的方法,此时直接激活即可:快速三次点击目标游戏对象即可。
这种方法的缺点是不灵活,一旦鼠标有其他动作,就会打断追踪;
方法2/3需要自己来扩展编辑器(思想是一样的):

2)打开一个新面板,用来驱动刷新:
public class SceneRealTimeFocusEditorWindow : EditorWindow
{
  SceneView.OnSceneFunc _delegate;
  static SceneRealTimeFocusEditorWindow _windowInstance;

  [MenuItem("Window/RealTimeFocus")]
  static void RealTimeFocus()
  {
    if (_windowInstance == null)
    {
      _windowInstance = EditorWindow.GetWindow(typeof(SceneRealTimeFocusEditorWindow)) as SceneRealTimeFocusEditorWindow;
      _windowInstance._delegate = new SceneView.OnSceneFunc(OnSceneFunc);
      SceneView.onSceneGUIDelegate += _windowInstance._delegate;
    }
  }

  void OnDestroy()
  {
    if (_delegate != null)
    {
      SceneView.onSceneGUIDelegate -= _delegate;
    }
  }

  public static void OnSceneFunc(SceneView sceneView)
  {
    _windowInstance.CustomSceneGUI(sceneView);
  }

  void CustomSceneGUI(SceneView sceneView)
  {
    if (Selection.activeTransform != null && Selection.activeTransform.root != null && active)
    {
      SceneView.lastActiveSceneView.pivot = Selection.activeTransform.position;
      //SceneView.lastActiveSceneView.Repaint();

      SceneView.RepaintAll();
    }
  }

  private bool active = false;
  void OnGUI()
  {
    active = GUILayout.Toggle(active, "Active RealTimeScene");
  }

}
此种方法的优点:打开面板,可实现当前选中的任意对象的Scene实时追踪

3)Scene中的按钮扩展:
[CustomEditor(typeof(MonoBehaviour), true)]
public class SceneRealTimeFocusEditor : Editor
{
  public void OnEnable()
  {
    active = false;
  }
  public void OnDisable()
  {
    active = false;
  }

  private bool active = false;
  void OnSceneGUI()
  {
    if (Selection.activeTransform != null)
    {
      Handles.BeginGUI();
      GUILayout.BeginArea(new Rect(0, 0, 200, 200));
      if (!active)
      {
        if (GUILayout.Button("Active Real Time Trace", GUILayout.Height(30)))
        {
          active = true;
        }
      }
      else
      {
        if (GUILayout.Button("Close Real Time Trace", GUILayout.Height(30)))
        {
          active = false;
        }
      }
      GUILayout.EndArea();
      Handles.EndGUI();

      if (active)
      {
        SceneView.lastActiveSceneView.pivot = Selection.activeTransform.position;
        SceneView.lastActiveSceneView.Repaint();
      }
    }
  }
}
本方法的缺点是:若针对MonoBehaviour及其子类,则当选中的目标对象有多个子物体、多个基于monobehavoiur的component时,按钮显示会有问题;若不针对MonoBehaviour及其子类,则只能针对特定类型物体选中时实时追踪。

Scene的实时追踪显示的更多相关文章

  1. CSS实时编辑显示

    方法 CSS实时编辑显示:通过display:block让css文本显示出来,再加上contentEditable使文本可编辑 <!DOCTYPE html> <html> & ...

  2. asp.net MVC SignalR 与数据库 实时同步显示

    asp.net MVC SignalR 与数据库 实时同步显示 错误:未启用当前数据库的 SQL Server Service Broker,因此查询通知不受支持.如果希望使用通知,请为此数据库启用 ...

  3. iOS 日志获取和实时浏览器显示日志

    https://juejin.im/entry/576252855bbb500063e51c7d iOS 日志获取和实时浏览器显示日志

  4. EV录屏 --- 免费无水印,集视频录制与直播功能于一身的桌面录屏软件, 支持录屏涂鸦、实时按键显示、视频体积压缩等实用功能

    https://www.ieway.cn/index.html 免费无水印,集视频录制与直播功能于一身的桌面录屏软件,支持录屏涂鸦.实时按键显示.视频体积压缩等实用功能 EVCapture 3.9.7 ...

  5. 四轴飞行器1.4 姿态解算和Matlab实时姿态显示

    原创文章,欢迎转载,转载请注明出处 MPU6050数据读取出来后,经过一个星期的努力,姿态解算和在matlab上的实时显示姿态终于完成了. 1:完成matlab的串口,并且实时通过波形显示数据 2:添 ...

  6. cool 软件 —— Carnac(实时桌面显示按键)

    1. Carnac 下载地址:Carnac, the Magnificent Keyboard Utility 使用说明:carnac – 在屏幕实时显示按键操作

  7. vdbench测试实时可视化显示

    前言 前一段时间碰到一个系统,用rados bench 去跑都还比较正常,但是一跑数据库就非常慢,测试工具会抛出延时过大的提示,经过排查发现,云平台中有一台虚拟机还运行着备份数据库的服务,而这个备份软 ...

  8. opencv+python视频实时质心显示

    利用opencv+python实现以下功能: 1)获取实时视频,分解帧频: 2)将视频做二值化处理: 3) 将视频做滤波处理(去除噪点,获取准确轮廓个数): 4)识别图像轮廓: 5)计算质心: 6)描 ...

  9. MFC For循环中实时更新显示Edit内容

    在for(){}循环中如果有处理函数,然后需要显示的时候,简单的UpdateData(false);是不行的: for (int i=0;i<10000;i++) { m_nT1.Format( ...

随机推荐

  1. 使用dynamic来简化反射实现

    dynamic是Framework4.0的新特性,dynamic的出现让C#具有了弱语言类型的特性,编译器在编译的时候,不再对类型进行检查,不会报错,但是运行时如果执行的是不存在的属性或者方法,运行程 ...

  2. Python 学习笔记(1) - 开始

    找一个能看的教程(不用太过于纠结以至于耗费大量时间,很可能还没开始就放弃了. -- 这条要作为新的做事准则放入我的日常了,警惕一开始就追求完美常常会什么也得不到.) 我喜欢看书不爱视频,所以找了这个: ...

  3. 常用webservice接口地址

    天气预报Web服务,数据来源于中国气象局Endpoint :http://www.webxml.com.cn/WebServices/WeatherWebService.asmxDisco       ...

  4. nRF52系列——nRF52832来袭

    nRF52系列——nRF52832来袭 Nordic凭借着在无线技术的数十年深耕,推出第一个μBlue芯片-- nRF8001.其低功耗等特性在当时吸引了无数厂商的目光,并将这产品应用到多个领域,再之 ...

  5. 在vmware 6.5+ubuntu12.04上安装VMware tools出现问题的分析

    笔者已经写了一篇关于安装"VMware Tools",以实现文件共享的文章,那篇文章对于你实现共享操作是足够了, 所以,倘若你赶时间不如直接去在虚拟机的linux中利用VMware ...

  6. 【转】.NET开发人员的瓶颈和职业发展

    现在社会比前几年浮躁了,越来越多的人抱怨薪水低,高薪工作不好找; 诚然这有CPI的压力,可是也有很多人没有认清自己的职业发展. 很多.NET程序员个各种纠结,想拿高薪又拿不到,想提高又不知道怎么能提高 ...

  7. mcd, lm, VS lx

    LED常识之 mcd&lm&w的关系 转载自:http://1198.vip.blog.163.com/blog/static/202177117201211624535412/ LE ...

  8. 网络流系列算法总结(bzoj 3438 1061)

    网络流嘛,怎么看都是一堆逗逼题嘛,反正遇到还是都做不起嘛.... 网络流的模板非常简单,难点都在于建图,网络流的建图解决问题范围之广,下至A+B Problem,上至单纯形,线性规划.所以如果对于网络 ...

  9. Stanford CoreNLP--功能列表

    Standford CoreNLP包含很多功能,github上有源码,github地址:Stanford CoreNLP,有需要的话可以下载看看. 主要内容在网站上都有描述,原文是这样写的: Choo ...

  10. Google面试题之100层仍两个棋子

    一道Google面试题,题目如下:"有一个100层高的大厦,你手中有两个相同的玻璃围棋子.从这个大厦的某一层扔下围棋子就会碎,用你手中的这两个玻璃围棋子,找出一个最优的策略,来得知那个临界层 ...