Scene的实时追踪显示
最近在处理酷跑类型游戏时,遇到一个功能需求:需要在摄像机实时追踪角色显示(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的实时追踪显示的更多相关文章
- CSS实时编辑显示
		方法 CSS实时编辑显示:通过display:block让css文本显示出来,再加上contentEditable使文本可编辑 <!DOCTYPE html> <html> & ... 
- asp.net MVC SignalR 与数据库 实时同步显示
		asp.net MVC SignalR 与数据库 实时同步显示 错误:未启用当前数据库的 SQL Server Service Broker,因此查询通知不受支持.如果希望使用通知,请为此数据库启用 ... 
- iOS 日志获取和实时浏览器显示日志
		https://juejin.im/entry/576252855bbb500063e51c7d iOS 日志获取和实时浏览器显示日志 
- EV录屏 --- 免费无水印,集视频录制与直播功能于一身的桌面录屏软件, 支持录屏涂鸦、实时按键显示、视频体积压缩等实用功能
		https://www.ieway.cn/index.html 免费无水印,集视频录制与直播功能于一身的桌面录屏软件,支持录屏涂鸦.实时按键显示.视频体积压缩等实用功能 EVCapture 3.9.7 ... 
- 四轴飞行器1.4 姿态解算和Matlab实时姿态显示
		原创文章,欢迎转载,转载请注明出处 MPU6050数据读取出来后,经过一个星期的努力,姿态解算和在matlab上的实时显示姿态终于完成了. 1:完成matlab的串口,并且实时通过波形显示数据 2:添 ... 
- cool 软件 —— Carnac(实时桌面显示按键)
		1. Carnac 下载地址:Carnac, the Magnificent Keyboard Utility 使用说明:carnac – 在屏幕实时显示按键操作 
- vdbench测试实时可视化显示
		前言 前一段时间碰到一个系统,用rados bench 去跑都还比较正常,但是一跑数据库就非常慢,测试工具会抛出延时过大的提示,经过排查发现,云平台中有一台虚拟机还运行着备份数据库的服务,而这个备份软 ... 
- opencv+python视频实时质心显示
		利用opencv+python实现以下功能: 1)获取实时视频,分解帧频: 2)将视频做二值化处理: 3) 将视频做滤波处理(去除噪点,获取准确轮廓个数): 4)识别图像轮廓: 5)计算质心: 6)描 ... 
- MFC For循环中实时更新显示Edit内容
		在for(){}循环中如果有处理函数,然后需要显示的时候,简单的UpdateData(false);是不行的: for (int i=0;i<10000;i++) { m_nT1.Format( ... 
随机推荐
- 回答了个问题,9x9 乘法表生成器
			# -*- coding: utf-8 -*- from prettytable import PrettyTable pt = PrettyTable() # 需要安装prettytable这个库来 ... 
- IT新人养成与蘑菇理论
			(一)来源及定义 “蘑菇定律”最早是在上世纪70年代一批年轻的电脑程序员编写的.当时,美国一批电脑程序员意外发现,一批刚从学校毕业的新人参加了工作,这些人很难适应工作环境.在这种情况下,这些电脑 ... 
- sql server2005主从数据库同步配置
			网站规模到了一定程度之后,该分的也分了,该优化的也做了优化,但是还是不能满足业务上对性能的要求:这时候我们可以考虑使用主从库.主从库是两台服务器上的两个数据库,主库以最快的速度做增删改操作+最新数据的 ... 
- cocos2dx3.4 导出节点树到XML文件
			l利用cocostudio做UI和场景时,经常要去获取某个节点,cocostudio2.1开始加入了文件的概念,可以创建场景,节点,层等文件,把公用的东西创建到文件里,然后把这个文件拖到场景里使用,达 ... 
- http://www.w3cplus.com/animation/create-animated-text-fills.html
			关于svg的资料: http://www.w3cplus.com/animation/create-animated-text-fills.html asp.net中jquery的ajax调用cs文件 ... 
- Android入门教程之我见
			真正的从安卓入门学习到实际工作也差不多一年时间了,也做了几个项目.在这期间经历了一开始学习Android的基本知识后仍旧无从下手,不知道如何开始开发一个app,到现在也开始学会注意Android架构的 ... 
- Spring 3整合Quartz 1实现定时任务一:常规整合(基于maven构建)
			Spring配置Quartz例子(基于maven构建) 在Spring中使用Quartz有两种方式实现:第一种是任务类继承QuartzJobBean,第二种则是在配置文件里定义任务类和要执行的方法,类 ... 
- SDUT 2352	Run Length Encoding
			点我看题目 题意 :将给定的字符串编码,编码的规则根据两条,1.如果字符串里有连续相等的字符,就变为两个字符,一个是这些连续相同的字符的个数,另一个是这个字符,但是如果数量超过了9个,那就输出9再输出 ... 
- 李洪强漫谈iOS开发[C语言-028]-逗号表达式
- 【Xamarin挖墙脚系列:Xamarin4.0的重大变更】
			原文:[Xamarin挖墙脚系列:Xamarin4.0的重大变更] Windows下的变更不大,主要还是bug 的修复,性能的优化,API的扩展实现. 变化最大的是在Mac上的那个Xamarin.iO ... 
