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( ...
随机推荐
- Android自定义图片加载框架
大神原网址: http://blog.csdn.net/lmj623565791/article/details/41874561 思路: 1. 压缩图片 压缩本地图片: 获得imageview想要 ...
- NSString NSMutableString copy mutableCopy retain weak strong整合
copy retain assign的差别在于对象属性的set方法 NSString 与 NSMutableString NSString是不可变字符串对象,这句话的意思,结合代码: #import ...
- POJ 3414 Pots bfs打印方案
题目: http://poj.org/problem?id=3414 很好玩的一个题.关键是又16ms 1A了,没有debug的日子才是好日子.. #include <stdio.h> # ...
- Ubuntu下Memcache的安装与基本使用
安装Memcache Memcache分为两部分,Memcache服务端和客户端.Memcache服务端是作为服务来运行的,所有数据缓存的建立,存储,删除实际上都是在这里完成的.客户端,在这里我们指的 ...
- iOS开发之国际化
iOS 国际化.根据系统不同的语言自动切换. 首先.选择项目 Add new file -->iOS -->Resource -->Strings File . 命名为Locali ...
- Pentaho Data Integration Step: BD Procedure Call
官网连接:http://wiki.pentaho.com/display/EAI/Call+DB+Procedure 描述 调用数据库存储过程步骤允许用户执行一个数据库存储过程,并且得到结果.存储过程 ...
- java WebService简单使用案例
首先,建立一个WebService: package garfield; import javax.jws.WebService; import javax.xml.ws.Endpoint; @Web ...
- SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-005-Bean的作用域@Scope、ProxyMode
一. Spring的bean默认是单例的 But sometimes you may find yourself working with a mutable class that does main ...
- ANDROID_MARS学习笔记_S04_006_用获取access_token,access_token_secrect
一.代码流程 1.MainActivity会开启PrepareRequestTokenActivity 2.PrepareRequestTokenActivity会根据配置文件的CONSUMER_KE ...
- Android中的Parcel机制 实现Bundle传递对象
Android中的Parcel机制 实现了Bundle传递对象 使用Bundle传递对象,首先要将其序列化,但是,在Android中要使用这种传递对象的方式需要用到Android Parc ...