• Stars
    star
    128
  • Rank 281,044 (Top 6 %)
  • Language
    C#
  • Created over 8 years ago
  • Updated almost 5 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A Unity Animation Path Preview Unity 动画路径预览工具

原因

在使用 Unity 开发游戏过程中,经常使用到 Animation 功能来为物体做动画效果,其中就包括物体的位移路径动画,比如过场动画里镜头的路径移动等。现有的 Animation 功能只能编辑关键帧所在时刻的物体位置,而无法一览物体路径动画的轨迹,造成美术人员编辑路径动画时,没办法直观的查看所编辑的路径曲线。另外,在 Animation 窗口里进行调整曲线的切线,非常的不便,只能在180度的斜率范围内调整数值。

目标

实现实时的动画路径预览,快速定位关键帧,方便编辑切线。

这里写图片描述

解决

为了可以实时预览动画路径,那么就需要获得当前 Animation 窗口的动画数据,但是 Unity 不开放操作 Animation 窗口类,只能通过反射来处理。 创建的 AnimationWindowUtil 类,即是为了与 Animation 窗口的数据进行交互。

这里写图片描述

这里写图片描述

动画数据里面存储的是使用埃尔米特(Hermite)曲线公式的值,它是使用各个顶点的斜率来构建曲线,这也造成了在 Animation 窗口编辑切线的不便,没法精确控制斜率的值。

这里写图片描述

合适的方式是使用贝塞尔(Bézier)曲线,它提供了两个控制点来调整切线,控制点的位置比起控制斜率的值大小来的直观方便多了。好在这两种曲线公式是可以转换的,Hermite 曲线转换成 Bézier 曲线步骤如下:

P0(b) = P0(h)
P1(b) = P0(h) + M0(h) * 1/3
P2(b) = P1(h) - M1(h) * 1/3
P3(b) = P1(h)

转换完成之后,则可通过绘制 Bézier 曲线,将动画路径展现出来。

这里写图片描述

绘制的绿色点是每个关键帧的位置,点中绿色点,即可直接在 Animation 窗口定位到当前关键帧,方便直接立即编辑。点中绿色点时,会在该点的旁边出现灰色控制点,直接点中控制点,就可以直接调整该点的切线了。

这里写图片描述

这样来调整切线比在 Animation 窗口里面进行调整斜率方便的多了。切线调整完成后,通过 Bézier 曲线转换成 Hermite 曲线,来写回动画数据。

这里写图片描述

当关键帧过多时,可能会遮挡住曲线的走向绘制,特别是在转弯的地方,故也提供关闭显示关键帧点的功能。

结语

Unity 编辑器开放的接口不能够实现于想要实现的功能时,只能反编译编辑器代码,分析相应所封闭起来的功能代码,才能获取到想要的数据。动画数据存储的是 Hermite 曲线公式,而这种曲线无法在场景里面进行方便的调整,只能通过转换成 Bézier 曲线。

源码

Github 地址:https://github.com/akof1314/AnimationPath

More Repositories

1

CoolFormat

CoolFormat Source Code Formatter
C++
539
star
2

Wiz.Editor.md

一个基于 Editor.md 构建的为知笔记 Markdown 插件
JavaScript
504
star
3

UnityAssetDanshari

Unity Asset Danshari 资源断舍离
C#
285
star
4

UnityParticleSystemPreview

Unity ParticleSystem Preview 粒子预览插件
C#
270
star
5

AssetBundleReporter

Unity AssetBundle Reporter
C#
150
star
6

uGUI_LinkImageText

Unity uGUI Text support insert link and image
C#
111
star
7

UnityTMProFontCustomizedCreater

Unity TextMesh Pro 文本组件之字体图集生成工具
ShaderLab
71
star
8

Unity-TextMeshPro-DynamicText

Unity TextMeshPro DynamicText 动态文本组件
C#
51
star
9

Wiz.UEditor

一个基于 UEditor 构建的为知笔记编辑器插件
JavaScript
49
star
10

Unity-ConsoleTiny

⚡ Console Tiny is a powerful replacement for Unity's editor console.
C#
46
star
11

UnityEditorListView

UnityEditor ListView Control
C#
42
star
12

Sublime-CoolFormat

A Sublime Text plugin for Source Code Formatter
Python
33
star
13

uGUISpriteInAtlasShader

Unity uGUI sprite shader
GLSL
32
star
14

Unity-EditorInternalsVisibleDemo

Unity Editor Internals Visible
C#
31
star
15

UnityAnimationCurvePopupMenu

Unity AnimationCurvePopupMenu (Copy, Paste)
C#
31
star
16

ObjectPickerAdvanced

Unity ObjectPicker Advanced 对象选择器
C#
29
star
17

UnityNavToCollider

Unity NavMesh To Collider
C#
21
star
18

Cocos2dxGame

Cocos2d-x Game Tutorials
C++
21
star
19

Wiz.Title.Cleaner

一个支持正则的为知笔记文章标题清理插件
CSS
19
star
20

UnityVirtualFolder

Unity VirtualFolder
C#
12
star
21

WPS_COOL_CSV

一个能够保存Unicode编码CSV文件的WPS插件
C#
12
star
22

UnityEditorLearn

Unity Editor Learn
9
star
23

UnityTools

Some useful tools
C#
8
star
24

decrypter_xrd

C++
8
star
25

Unity-Live2D-uGUI

Unofficial
C#
8
star
26

Unity-EditorConnectionExample

EditorConnectionExample
C#
8
star
27

UnitySpritePackerOverview

Unity Sprite Packer Overview
C#
8
star
28

ConvertVcproj

ConvertVcproj
C++
4
star
29

Wiz.Auto.Editor

一个支持自动选择编辑器的为知笔记功能增强插件
JavaScript
4
star
30

UnityBuiltinStyleIcon

Unity builtin styles and icons viewer
C#
4
star
31

WuHuanTools

Some Tools
C++
3
star
32

VisualStudioFileOpenTool

Visual Studio File Open Tool
C#
2
star
33

Unity-UI-MeshEffect

Unity UI MeshEffect
C#
2
star
34

akof1314.github.io

个人网站
HTML
1
star
35

Unity-DocRedirect

Redirect the Unity document to offline documentation 文档重定向
C#
1
star