UnityEditorWindow做一个TimeLine的滑动块

最近在做一个基于TimeLine的动画编辑器,在制作TineLine滑动条时遇到问题,网上查了好久,试了好多GUI组件都不满意。
最后在一个开源unity TimeLine插件中找到合适的方法。 地址:https://github.com/sassembla/TimeFlowShiki .
大致上是将Window当做一个滑动块,可以监听到鼠标Event.Drag的事件,然后移动滑块位置。
直接上代码

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine; public class TimeLineWindowTest : EditorWindow
{
public static TimeLineWindowTest window;
public int id = 1221;
public GUISkin skin;
[MenuItem("Window/TimeLineWindowTest")]
static void OpenWindow()
{
window = GetWindow<TimeLineWindowTest>();
}
Rect timeLineRect;
Vector2 mouseLastPos = Vector2.zero;
Vector2 mousePos = Vector2.zero;
Rect trackRect = new Rect(200, 0, 150, 30);
private void OnGUI()
{
BeginWindows();
GUI.BeginGroup(new Rect(200, 0, position.width, position.height));
{
timeLineRect = new Rect(200, 0, position.width, 30);
GUI.Window(id, timeLineRect, CallBack, "TimeLine1", skin.window);
}
GUI.EndGroup();
EndWindows();
} private void CallBack(int id)
{
bool useEvent = false;
mousePos = Event.current.mousePosition;
Vector2 mouseDownPos;
switch (Event.current.type)
{
case EventType.MouseDown:
if (trackRect.Contains(mousePos))
{
mouseDownPos = mousePos;
useEvent = true;
} break;
case EventType.MouseDrag:
if (trackRect.Contains(mousePos))
{
float xOffset = mousePos.x - mouseLastPos.x;
trackRect.x += xOffset;
Debug.Log("拖拽");
useEvent = true;
}
break;
}
DrawTracks(trackRect); GUI.DragWindow();
if (useEvent)
{
Event.current.Use();
} }
private void Update()
{ mouseLastPos = mousePos;
} private void DrawTracks(Rect timeLineRect)
{
GUI.Box(timeLineRect, "265645", skin.box); }
}

  

注意一点Update(),只要是继承自EditorWindow中都可以调用每帧执行。

核心就这些。很简单,是不是!

运行效果如下:

UnityEditorWindow做一个TimeLine的滑动块的更多相关文章

  1. 小程序做一个能够左右滑动切换的多tab页面

    主要原理:使用 <swiper> 和 <scroll-view> 组件 代码片段: https://developers.weixin.qq.com/s/mLx4FWmF757 ...

  2. Qt 做一个类似微信滑动聊天界面的demo

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://www.cnblogs.com/lihuidashen/p/115889 ...

  3. 创业成本?亲身经历告诉你做一个app要多少钱

    导语:作为一名苦逼的移动互联网创业者,被外行的朋友们问及最多的问题是“做一个网站需要多少钱?”或者“做一个APP需要多少钱?” 作为一名苦逼的移动互联网创业者,被外行的朋友们问及最多的问题是“做一个网 ...

  4. iOS:步进UIStepper、滑动块UISlider、开关UISwitch的基本使用

    步进UIStepper.滑动块UISlider:当它们作为事件,被触发时,它们的值会发生改变.正因为如此,触发该事件时,可以一张一张翻阅浏览图片,,,, 步进UIStepper: @property( ...

  5. 程序员被老板要求两个月做个APP,要不比京东差,网友:做一个快捷方式,直接链到京东

    隔行如隔山,这句话说得一点都没错.做一个程序员,很多人都会羡慕,也有很多人会望而却步. 作为一个外行人,你别看程序员每天坐在电脑前敲敲键盘打打代码,以为很简单,其实啊也只有程序员自己明白,任何一个看似 ...

  6. 有了lisk,为什么我们还要做一个Asch?

    0 前言 首先要声明一点,我们和我们的一些朋友都是lisk的投资人和支持者,我们也相信lisk会成功. 事实上,lisk已经成功了一半,目前在区块链领域融资金额排行第二,仅次于以太坊. 那为什么我们还 ...

  7. E时代主机,其实做一个小虚拟主机还是不错的

    http://www.idcen.com/ 做微信没有网上测试地址,找了一下发现以前用过的.记录一下.一个100m的虚拟主机需要三四十块钱,做微信,做一个小型网站还是够用的,就是mysql有点问题,不 ...

  8. 做一个聪明的.net程序员

    最近看了传智播客(http://net.itcast.cn/)的.net培训视频,感受颇深,忍不住要把感受写下来跟网友分享一下. 我从接触.net到现在已经至少过去了三五个年头,用.net也已经做了若 ...

  9. 如何做一个导航栏————浮动跟伪类(hover)事件的应用

    我们先说一下伪类选择器的写法: 写法:选择器名称:伪类状态{}4 常见伪类状态: 未访问:link 鼠标移上去:hover 激活选定:active 已访问:visited 获得焦点的时候触发:focu ...

随机推荐

  1. [LuoguP2161[ [SHOI2009]会场预约 (splay)

    题面 传送门:https://www.luogu.org/problemnew/show/P2161 Solution splay 的确有线段树/树状数组的做法,但我做的时候脑残没想到 我们可以考虑写 ...

  2. Docker(8)- docker search 命令详解

    如果你还想从头学起 Docker,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1870863.html 作用 从 Docker Hub ...

  3. HTML5 实现的一个俄罗斯方块实例代码

    /*实现的功能:方块旋转(W键).自动下落.移动(ASD).消行.快速下落(空格键).下落阴影.游戏结束.*/ <!DOCTYPE html>   <html>    < ...

  4. 【阿里云-大数据】阿里云DataWorks学习视频汇总

    阿里云DataWorks学习视频汇总 注意:本文档中引用的视频均来自阿里云官方的帮助文档,本文档仅仅是汇总整理,方便学习. 阿里云DataWorks帮助文档链接:https://help.aliyun ...

  5. layui table表格详解

    上次做table有些东西 忘记了 这次当作来个分析总结一下  跟大家共同学习 闲话不多说 直接上例子   代码: <form id="form1" runat="s ...

  6. 【译】理解Rust中的闭包

    原文标题:Understanding Closures in Rust 原文链接:https://medium.com/swlh/understanding-closures-in-rust-21f2 ...

  7. 适用初学者的5种Python数据输入技术

    摘要:数据是数据科学家的基础,因此了解许多加载数据进行分析的方法至关重要.在这里,我们将介绍五种Python数据输入技术,并提供代码示例供您参考. 数据是数据科学家的基础,因此了解许多加载数据进行分析 ...

  8. sql sever 2008基础知识

    下面是一些总结,如果执行时发现错误,可以查看错误消息进行解决,也可上网查资料 数据库的组成: 主数据文件:有且只有一个,扩展名为.mdf. 次数据文件:可以没有,也可以有任意个.扩展名为.ndf. 日 ...

  9. 【SpringCloud】consul注册中心注册的服务为内网(局域网)IP

    一.前因 最近在做公司的一个微服务项目,技术架构为spring cloud + consul + SSM. 当我写完一个功能要在本地测试时,发现服务运行成功,但是前后端联调报500错误. 当时的第一个 ...

  10. Docker 初始

    1. Docker 是什么? 官网的介绍是"Docker is the world's leading software container platform." 官方给Docke ...