最近在处理酷跑类型游戏时,遇到一个功能需求:需要在摄像机实时追踪角色显示(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. mysql 清空表 Truncate及delete区别

    1.delete from 表名[where]; 2.truncate table 表名; 3.delete将mysql表中所有记录一条一条删除到删完 4.truncate保留mysql表的结构,重新 ...

  2. 64位AutoItLibrary的安装

    安装AutoItLibrary,除了要先已经安装好Robotframework之外,先要安装一个叫pywin32的工具 第一步:pywin32的安装 pywin32的下载地址: http://sour ...

  3. 如何写一个像btgoogle一样的12306泄露数据查询

    demo地址:http://www.btgoogle.com/12306/ 圣诞节,12306送给了我们一个大礼物.大约 14w的数据泄露, 看网上都沸沸扬扬的.开始也准备找一个数据库来看看,随后,我 ...

  4. vs2013 IHttpActionResult NotFund Ok (WebAPI)

    vs2013  IHttpActionResult NotFund Ok   使用ASP.NET Web API构造基于restful风格web services,IHttpActionResult是 ...

  5. 如何在django的filter中传递字符串变量作为查询条件(动态改变查询条件)

    一般来说在需要查询数据的时候都是以下形式 ret=Articles.objects.filter(id=1) 然而如果要动态的改变查询的条件怎么办呢? 如下代码 def getModelResult( ...

  6. OneAlert 入门(二)——事件分析

    OneAlert 是国内首个 SaaS 模式的云告警平台,集成国内外主流监控/支撑系统,实现一个平台上集中处理所有 IT 事件,提升 IT 可靠性.有了 OneAlert,你可以更快更合理地为事件划分 ...

  7. mysql Partition(分区)初探

    mysql Partition(分区)初探   表数据量大的时候一般都考虑水平拆分,即所谓的sharding.不过mysql本身具有分区功能,可以实现一定程度 的水平切分.  mysql是具有MERG ...

  8. Linq 取差集 交集等

    string goodsList = context.Request.Form["goodsList"]; if (!string.IsNullOrEmpty(goodsList) ...

  9. Android用户界面 UI组件--TextView及其子类(五) DigitalClock,AnalogClock,RadioButton,CheckBox,ToggleButton汇总

    DigitalClock和AnalogClock两个时钟类 可以为DigitalClock设置背景图片,自定义时针,秒针,分针的样式 例子: <?xml version="1.0&qu ...

  10. 匿名hash

    [root@oadb test]# cat a1.pl use Data::Dumper; my @a=qw/1 3 5 7 9/; push @b ,{@a}; print Dumper(@b); ...