UnityEditorWindow做一个TimeLine的滑动块
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的滑动块的更多相关文章
- 小程序做一个能够左右滑动切换的多tab页面
主要原理:使用 <swiper> 和 <scroll-view> 组件 代码片段: https://developers.weixin.qq.com/s/mLx4FWmF757 ...
- Qt 做一个类似微信滑动聊天界面的demo
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://www.cnblogs.com/lihuidashen/p/115889 ...
- 创业成本?亲身经历告诉你做一个app要多少钱
导语:作为一名苦逼的移动互联网创业者,被外行的朋友们问及最多的问题是“做一个网站需要多少钱?”或者“做一个APP需要多少钱?” 作为一名苦逼的移动互联网创业者,被外行的朋友们问及最多的问题是“做一个网 ...
- iOS:步进UIStepper、滑动块UISlider、开关UISwitch的基本使用
步进UIStepper.滑动块UISlider:当它们作为事件,被触发时,它们的值会发生改变.正因为如此,触发该事件时,可以一张一张翻阅浏览图片,,,, 步进UIStepper: @property( ...
- 程序员被老板要求两个月做个APP,要不比京东差,网友:做一个快捷方式,直接链到京东
隔行如隔山,这句话说得一点都没错.做一个程序员,很多人都会羡慕,也有很多人会望而却步. 作为一个外行人,你别看程序员每天坐在电脑前敲敲键盘打打代码,以为很简单,其实啊也只有程序员自己明白,任何一个看似 ...
- 有了lisk,为什么我们还要做一个Asch?
0 前言 首先要声明一点,我们和我们的一些朋友都是lisk的投资人和支持者,我们也相信lisk会成功. 事实上,lisk已经成功了一半,目前在区块链领域融资金额排行第二,仅次于以太坊. 那为什么我们还 ...
- E时代主机,其实做一个小虚拟主机还是不错的
http://www.idcen.com/ 做微信没有网上测试地址,找了一下发现以前用过的.记录一下.一个100m的虚拟主机需要三四十块钱,做微信,做一个小型网站还是够用的,就是mysql有点问题,不 ...
- 做一个聪明的.net程序员
最近看了传智播客(http://net.itcast.cn/)的.net培训视频,感受颇深,忍不住要把感受写下来跟网友分享一下. 我从接触.net到现在已经至少过去了三五个年头,用.net也已经做了若 ...
- 如何做一个导航栏————浮动跟伪类(hover)事件的应用
我们先说一下伪类选择器的写法: 写法:选择器名称:伪类状态{}4 常见伪类状态: 未访问:link 鼠标移上去:hover 激活选定:active 已访问:visited 获得焦点的时候触发:focu ...
随机推荐
- 关于appium
一.特点 1.appium是开源的移动端自动化测试框架: 2.appium可以测试原生的.混合的.以及移动端的web项目: "移动原生应用"是指那些用iOS或者 Android S ...
- Java基础系列-单例的7种写法
原创文章,转载请标注出处:https://www.cnblogs.com/V1haoge/p/10755322.html 一.概述 Java中单例有7种写法,这个是在面试中经常被问到的内容,而且有时候 ...
- Docker(4)- Docker 命令大全
如果你还想从头学起 Docker,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1870863.html 容器生命周期管理 run sta ...
- 【杂谈】JS相关的线程模型整理
1.JS是单线程吗? 是的,到目前为止,JS语言没有多线程的语法,它的执行引擎只支持单线程,也就是一个JavaScript进程内只有一个线程. 2.事件循环什么? 事件循环就是执行线程不断的从队列中取 ...
- C#练习题 if
提示用户输入用户名,然后再提示输入密码,如果用户名是"admin"并且密码是"888888",则提示正确,否则,如果用户名不是admin还提示用户用户名不存在, ...
- 我叫Mongo,干了「查询终结篇」,值得您拥有
这是mongo第三篇"查终结篇",后续会连续更新5篇 mongodb的文章总结上会有一系列的文章,顺序是先学会怎么用,在学会怎么用好,戒急戒躁,循序渐进,跟着我一起来探索交流. 通 ...
- Pycharm激活码无偿分享,2020年最新Pycharm永久激活码!
2020年10月7日08:04:34更新的Pycharm激活码,还热乎着呢,速用~ 如果下边的这个Pycharm激活码过期失效了的话,大家可以关注我的微信公众号:Python联盟,然后回复" ...
- 论文解读 - MaskGAN:BETTER TEXT GENERATION VIA FILLING IN THE _____
1 简介 文本生成是自然语言处理中一个重要的研究领域,具有广阔的应用前景.当前主流的用来进行文本生成的模型主要是Seq2Seq模型,通常利用maximum likelihood和teacher for ...
- 02模板渲染和参数(补充:URL传参到视图)
先抛出代码: @app.route('/') def index(): return render_template('index.html',username ="郑勇") 问题 ...
- 使用jQuery简单实现返回顶部的一个小案例
1.简单写一个页面 首先我们应该创建两个盒子,container盒子主要模拟页面滚动到的位置,back盒子主要功能是实现返回顶部的功能 2.简单的对这两个盒子写一些样式 我们应该先将返回顶部盒子隐藏( ...