纳金网

标题: Unity插件开发教程:基于Flux的技能编辑器 [打印本页]

作者: 匿名    时间: 2018-8-22 14:21
标题: Unity插件开发教程:基于Flux的技能编辑器
鸣谢: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
改造后新增的功能

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

对Flux事件的扩充,这部分是工作量大头,正是有了N个新事件,才可用于编辑技能。
5.png
在事件列表之中,增加Skill类型,以上是扩展的Skill事件。

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

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







欢迎光临 纳金网 (http://rs.narkii.com/club/) Powered by Discuz! X2.5