查看: 1660|回复: 0
打印 上一主题 下一主题

[教程] Unity插件开发教程:基于Flux的技能编辑器

[复制链接]
匿名
跳转到指定楼层
楼主
匿名  发表于 2018-8-22 14:21:59 |倒序浏览
鸣谢:qq_14939027
Unity插件开发作用和意义


随着Unity游戏引擎越来越流行,用好Unity将直接影响到游戏前端的开发速度和质量,Unity插件开发正是用好的一个范畴。


那么什么是Unity插件呢? 可大可小,说来话长,文中将用实际例子说明,可以简单的理解成端游和页游的配套工具,只不过基于Unity的工具全部都集中在Unity环境下我们的游戏工程中,不用到处分exe了,并且可以在编辑时、运行时、直接访问到我们的游戏资源和逻辑数据。


具备好的集成式插件工具将带来哪些益处:

1)
资源处理类工具,减少游戏开发过程痛苦,策划、美术、程序均轻松,导入资源和配置过程均使用配套工具,处理资源流程行云流水,一气呵成,不用手动一个个设置,减少手动操作出错概率。

2)
好的内容制作类插件,类似扩充的特效编辑器、关卡编辑器、技能编辑器等,可以让美术和策划人员更能发挥出艺术创造力,反复的打磨创作内容,使游戏品质更上一层楼。

3)
程序开发辅助类插件,类似各种调试辅助插件、性能插件、通用模块插件等,可以让开发更加迅速。


Unity插件开发应该具备什么样的标准:

1
快速。手游制作周期相对很短,如果花一两个月写一个加速开发的插件,那就有些鸡肋了。除非这个插件非常的关键重要。一般的中小型工具,最好做到开发周期在几个小时到一周之内。

首先,开发Unity插件使用脚本语言,比使用C++高产很多;其次,编写环境集成在Unity下,各类底层API几乎全部都有;再次,绘制工具界面的API也都齐全,制作工具界面在以往会花费大量时间。所以,的确可以很快。

2)
易用。工具类东西是提供给同学使用的,如果不好用,不便捷,将会极大的影响同学的工作心情,影响他的效率,并且影响他的创作灵感。

3)
易扩展。策划和美术同学永远都非常贪心,有了最初他们想要的功能,他们就想要更强大的功能了,然后更强大,更完善,更易用。所以拿到第一版需求,就直接把功能朝完善想,朝夸张想,然后在设计上埋好伏笔,一般都会用的上。


详细的插件开发细节将在后续的文章中继续讲解,本文将以基于Flux的技能编辑器为例,宏观的说明一款工具的功能、开发、结构。


技能编辑器特性和需求


由于手游的周期较短,所以了解到的技能编辑器的需求一般为:制作一个技能编辑器;可以做出什么样的技能;需要支持什么样效果。


程序需要根据技能效果,拆解出功能点,做出设计支持这些功能点,并且要做到支持Unity插件开发那三条标准。所以,就有了以下思考:


技能属于顺序播放类效果,在一段顺序时间内,播放动作、特效、声音、环境变化等等效果,触发受击、击飞、飞天、冲刺、硬直等等事件。

也就是这个样的了:

1.png

基础选型


考虑完技能的需求点,如果从头写这么一个框架,写完黄花菜都凉了,所以,考虑一个在一个现有较成熟的时间轴事件体系上,做扩展操作,这个时间轴体系需要成熟、稳定、100%开源、易学、易懂、易扩展。


有了这么一个框架,自己在上边添加需要的事件就可以了,在具体的点触发不同事件,并且可以修改时间轴,实现播放、变速等等效果。

遍历自己了解的时间轴事件体系,经过对比,最终决定使用Flux进行扩展。

Flux介绍


Flux是一款基于时间轴的顺序播放系统,想象一下Flash编辑器,区别在于,Flash编辑器是编辑时间轴上的每一帧来制作动画,而Flux是指定在每一帧触发什么事件。


Flux默认内置了一些原生事件,包括:移动、旋转、变色、播放动画、动画融合、播放声音、实例化对象等等等。


有了这样一根时间轴和默认的事件,Flux已经可以用来制作过场动画、引导动画、剧情动画了。


以下是一些Flux视频,可以更加直观的看到原生Flux都可以做到什么。


http://www.fluxeditor.com/videos.html

http://www.youtube.com/watch?v=7HIXxcPd_GM

2.png



3.png

Flux数据结构说明


Flux的运行时数据结构主干逻辑结构简单,也正是因为它的简单易理解,才很容易上手、改造。
            

FSequence: 序列,Flux将一系列事件编辑在时间轴上,通过时间轴的推进播放这些事件,所以这样的事件集合就称为一个序列,非常的形象,技能,也就是一系列事件的播放,也正是一个序列。

序列是Flux中最上层的数据结构,最大的单位,其它类均被包含在序列中。

FSequence为一个Component,挂载在GameObject,由Update函数进行驱动。

FTimeLine :时间轴,有了序列,那么事件就需要定在时间轴上,每一个序列都具有1到N条时间轴。

为什么会有N条呢?所有事件根据一条时间轴进行推进不就可以了吗?

其实严格的讲的确一条时间轴就足够了,并且如果只编辑技能的话,可以只添加一条时间轴,分为多条时间轴是因为在编辑时,会更方便更有条理和更容易理解。

FTimeline做为FSequence的成员变量,由FSequence进行更新驱动。
              
FTrack:轨道,事件并非裸的定在时间轴上,而是定在轨道之上,轨道的意义在于可以将彼此有关联的事件定在同一条轨道之上,这样可以在事件的起始和结束做出与其它事件的融合操作。

另外在编辑器中可以对轨道进行定制外观,定制操作等,例如AnimationTrack之上只能运行AnimationEvent,并且AnimationTrack可以调整动作融合。
                          
FTrack做为FTimeline的成员变量,由FTimeline进行更新驱动。
            
                           
FEvent:事件,终于到了最核心和最基础的东西,每一个事件是一个基本的触发单元

改造后的Flux界面说明

在说明了Flux核心的数据结构之后,你可能需要先看一下Flux的视频演示,这样理解接下来的界面说明更加顺畅。

4.png
  • 当前正在编辑的Sequence名称:一个场景中可能存在N个Sequence,在此选中一个,则编辑选中的Sequence。
  • 自己添加的Reset Position归位按钮:在编辑技能时候,经常会出现一些带有位移的技能,比如冲刺之类,如果当技能播放完毕后,自动将人物回位,则影响观看技能的整体效果感。所以增加一个按钮,当人物N次位移之后,在编辑者喜欢的时候,点下归位,人物回到起始位置。
  • Sequence更新方式:可以选择Normal、Unscaled Time,看到这两个选项的名字就明白啦,一个普通更新,一个不受游戏中Time.scale的影响,自己更新自己的。(注意,慎用UnscaledTime,尽量不用,除非是一些非常简单的运动,如果自己扩展的事件中使用UnscaledTime,这将是个旋窝,各处都会被UnscaledTime牵扯,Normal其实几乎足够处理所有情况)。
  • Sequence刷新帧率:选择每秒刷新多少帧,也可以自己指定,例如游戏帧率是60帧,但自己有意的将一些技能或效果帧率设为10帧,可以提高效率。
  • Sequence长度:此Sequence具有多少帧,填入数字为帧数,如果填入时间是不是更好理解?很遗憾现在没有填入时间指定长度功能,如果迫切需要可以自己扩展。
  • 一条TimeLine:TimeLine在我们的概念里是一个有时间刻度的时间条,在下方第10说明的确是时间条的UI说明,此处的第6条是逻辑概念上的TimeLine,每一个GameObject都有自己的一个TimeLine,共用一个TimeLine的UI。
  • 一条Track:蓝条处在它之上,就这么一条黑色的长条,类似一条轨道。
  • 一个Event:用蓝条表示,运行在Track之上。
  • 另外一条TimeLine,在TimeLine之上显示的GameObject名称即为代码中的TimeLine Owner名称。
  • TimeLine UI:所有TimeLine共用这条UI,因为所有TimeLine同时运行(如果需要可以修改),所以在编辑器状态下,只需要这一条UI就足够了,在这一条UI上拖动时间,观察所有TimeLine之上的运行效果。
  • 播放控制:播放、停止、快进、快退、向前一帧、向后一帧。
  • 查看帧的范围:在编辑Sequence时,有时需要放大可视范围,一目将整个Sequence的情况全部看在眼底,这时将帧范围设置成0到Sequence长度即可。有时需要精确地编辑某一帧的事件,则把可视范围变小,放大每一帧。
  • Event Inspector:当点击某个Event蓝条时,右边Inspector中则显示出此Event的信息,就像我们观察和修改GameObject的信息一样。
  • 事件帧Range:这条事件运行的Range,从某一帧到某一帧。
  • 事件属性:这条事件运行时所需要的属性,事件属性可以自己任意定义。
  • Track Inspector:显示当前Event所在的Track信息,大部分的Track都不包含属性,但是要做同一条Track上的N个事件彼此交互时,Track信息就非常有用了。
改造后新增的功能

对Flux支持编辑技能的改造主要集中在两部分,改造和扩充,从评估到投入使用,花费两周时间。
(1
对Flux机制的修改,这部分主要所做的事修改Flux的运行和操作方式,使它更适合用于编辑技能,例如上边提到的增加Reset Position按钮,在每次打开技能时,自动将样例人物和敌人加载进场景摆放等等。

对Flux事件的扩充,这部分是工作量大头,正是有了N个新事件,才可用于编辑技能。
5.png
在事件列表之中,增加Skill类型,以上是扩展的Skill事件。
  • Black Back:-_-黑屏,写成Black能让编辑者更容易看懂一些。
  • Camera Motion:相机运动,规划一条相机运动的路线,在释放技能时,相机随轨道运动。
  • Change TimeScale:修改TimeScale,释放技能时,整个世界都变慢了,或者突然加速。
  • Character Motion:人物运动,规划一条人物运动的曲线,这样打斗起来人物上蹿下跳、辗转腾挪。
  • Debuffs:Debuff事件,因为Debuff在逻辑上有特殊处理,所以单独开事件。
  • Hited Event:受击事件,人物受击,则触发此事件,在此事件中,做各种受击需要做的处理。
  • Normal Effect:释放特效,支持挂在任意地方,播放时跟随、脱离等等。
  • Play Audio:播放声音。
  • Shake Camera:抖屏。
  • Shoot Event:发射事件,制作发射类技能,弓箭、火球术等等。
  • Skill End Control:某些技能需要明确支持结束,则增加此事件,在技能结束时,给出通知。
  • Sprint Event:冲刺技能,冲刺?这和Character Motion有什么区别呢?因为不论朝哪个方向冲刺,冲刺过程中是带攻击判定的,更加消耗效率,所以做了区分。
  • Trigger Sequence:别忘了,Sequence做技能时改造而来,它原本是制作各类演示的,Trigger Sequence,在技能释放过程中,可以触发一套演示。这样支持演示和技能嵌套。
  • Weapon Attach:添加武器,不是添加在手上,而是添加在指定点,这样可以做出头上插了把刀的效果。
  • Weapon Shower:显示或隐藏武器,比如将武器扔出武器,这时需要隐藏武器,再将武器从怪物身上拔下,这时需要显示武器。

最终成型就是这个样子的了。
6.png

Flux 2.04 - 制作转场效果的专用插件下载:
http://www.narkii.com/club/thread-401553-1.html


分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
分享淘帖0 收藏收藏1 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-29 06:28 , Processed in 0.099699 second(s), 33 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部