add readme, license, and demo

This commit is contained in:
BlackMATov
2023-01-05 04:00:10 +07:00
parent c4a7f409c2
commit c13b440ada
33 changed files with 575 additions and 28 deletions

23
.github/demo/Release/.htaccess vendored Normal file
View File

@@ -0,0 +1,23 @@
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}gz -f
RewriteRule ^(.*)\.js$ $1\.jsgz [L]
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}gz -f
RewriteRule ^(.*)\.data$ $1\.datagz [L]
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}gz -f
RewriteRule ^(.*)\.mem$ $1\.memgz [L]
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}gz -f
RewriteRule ^(.*)\.unity3d$ $1\.unity3dgz [L]
AddEncoding gzip .jsgz
AddEncoding gzip .datagz
AddEncoding gzip .memgz
AddEncoding gzip .unity3dgz

2
.github/demo/Release/UnityLoader.js vendored Normal file

File diff suppressed because one or more lines are too long

BIN
.github/demo/Release/WebDemo.datagz vendored Normal file

Binary file not shown.

BIN
.github/demo/Release/WebDemo.jsgz vendored Normal file

Binary file not shown.

BIN
.github/demo/Release/WebDemo.memgz vendored Normal file

Binary file not shown.

View File

@@ -0,0 +1,97 @@
function UnityProgress (dom) {
this.progress = 0.0;
this.message = "";
this.dom = dom;
var parent = dom.parentNode;
var background = document.createElement("div");
background.style.background = "#4D4D4D";
background.style.position = "absolute";
parent.appendChild(background);
this.background = background;
var logoImage = document.createElement("img");
logoImage.src = "TemplateData/progresslogo.png";
logoImage.style.position = "absolute";
parent.appendChild(logoImage);
this.logoImage = logoImage;
var progressFrame = document.createElement("img");
progressFrame.src = "TemplateData/loadingbar.png";
progressFrame.style.position = "absolute";
parent.appendChild(progressFrame);
this.progressFrame = progressFrame;
var progressBar = document.createElement("img");
progressBar.src = "TemplateData/fullbar.png";
progressBar.style.position = "absolute";
parent.appendChild(progressBar);
this.progressBar = progressBar;
var messageArea = document.createElement("p");
messageArea.style.position = "absolute";
parent.appendChild(messageArea);
this.messageArea = messageArea;
this.SetProgress = function (progress) {
if (this.progress < progress)
this.progress = progress;
this.messageArea.style.display = "none";
this.progressFrame.style.display = "inline";
this.progressBar.style.display = "inline";
this.Update();
}
this.SetMessage = function (message) {
this.message = message;
this.background.style.display = "inline";
this.logoImage.style.display = "inline";
this.progressFrame.style.display = "none";
this.progressBar.style.display = "none";
this.Update();
}
this.Clear = function() {
this.background.style.display = "none";
this.logoImage.style.display = "none";
this.progressFrame.style.display = "none";
this.progressBar.style.display = "none";
}
this.Update = function() {
this.background.style.top = this.dom.offsetTop + 'px';
this.background.style.left = this.dom.offsetLeft + 'px';
this.background.style.width = this.dom.offsetWidth + 'px';
this.background.style.height = this.dom.offsetHeight + 'px';
var logoImg = new Image();
logoImg.src = this.logoImage.src;
var progressFrameImg = new Image();
progressFrameImg.src = this.progressFrame.src;
this.logoImage.style.top = this.dom.offsetTop + (this.dom.offsetHeight * 0.5 - logoImg.height * 0.5) + 'px';
this.logoImage.style.left = this.dom.offsetLeft + (this.dom.offsetWidth * 0.5 - logoImg.width * 0.5) + 'px';
this.logoImage.style.width = logoImg.width+'px';
this.logoImage.style.height = logoImg.height+'px';
this.progressFrame.style.top = this.dom.offsetTop + (this.dom.offsetHeight * 0.5 + logoImg.height * 0.5 + 10) + 'px';
this.progressFrame.style.left = this.dom.offsetLeft + (this.dom.offsetWidth * 0.5 - progressFrameImg.width * 0.5) + 'px';
this.progressFrame.width = progressFrameImg.width;
this.progressFrame.height = progressFrameImg.height;
this.progressBar.style.top = this.progressFrame.style.top;
this.progressBar.style.left = this.progressFrame.style.left;
this.progressBar.width = progressFrameImg.width * Math.min(this.progress, 1);
this.progressBar.height = progressFrameImg.height;
this.messageArea.style.top = this.progressFrame.style.top;
this.messageArea.style.left = 0;
this.messageArea.style.width = '100%';
this.messageArea.style.textAlign = 'center';
this.messageArea.innerHTML = this.message;
}
this.Update ();
}

BIN
.github/demo/TemplateData/favicon.ico vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
.github/demo/TemplateData/fullbar.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
.github/demo/TemplateData/fullscreen.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
.github/demo/TemplateData/loadingbar.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

BIN
.github/demo/TemplateData/logo.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

28
.github/demo/TemplateData/style.css vendored Normal file
View File

@@ -0,0 +1,28 @@
/****************************************
==== RESETS
****************************************/
html,body,div,canvas { margin: 0; padding: 0; }
::-moz-selection { color: #333; text-shadow: none; }
::selection { color: #333; text-shadow: none; }
.clear:after { visibility: hidden; display: block; font-size: 0; content: " "; clear: both; height: 0; }
.clear { display: inline-table; clear: both; }
/* Hides from IE-mac \*/ * html .clear { height: 1%; } .clear { display: block; } /* End hide from IE-mac */
/****************************************
==== LAYOUT
****************************************/
html, body { width: 100%; height: 100%; font-family: Helvetica, Verdana, Arial, sans-serif; }
body { }
p.header, p.footer { display: none; }
div.logo { width: 204px; height: 38px; float: left; background: url(logo.png) 0 0 no-repeat; position: relative; z-index: 10; }
div.title { height: 38px; line-height: 38px; padding: 0 10px; margin: 0 1px 0 0; float: right; color: #333; text-align: right; font-size: 18px; position: relative; z-index: 10; }
.template-wrap { position: absolute; top: 50%; left: 50%; -webkit-transform: translate(-50%, -50%); transform: translate(-50%, -50%); }
.template-wrap canvas { margin: 0 0 10px 0; position: relative; z-index: 9; box-shadow: 0 10px 30px rgba(0,0,0,0.2); -moz-box-shadow: 0 10px 30px rgba(0,0,0,0.2); }
.fullscreen { float: right; position: relative; z-index: 10; }
body.template { }
.template .template-wrap { }
.template .template-wrap canvas { }

34
.github/demo/index.html vendored Normal file
View File

@@ -0,0 +1,34 @@
<!doctype html>
<html lang="en-us">
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Unity WebGL Player | UnityFlash</title>
<link rel="stylesheet" href="TemplateData/style.css">
<link rel="shortcut icon" href="TemplateData/favicon.ico" />
<script src="TemplateData/UnityProgress.js"></script>
</head>
<body class="template">
<p class="header"><span>Unity WebGL Player | </span>UnityFlash</p>
<div class="template-wrap clear">
<canvas class="emscripten" id="canvas" oncontextmenu="event.preventDefault()" height="600px" width="960px"></canvas>
<br>
<div class="logo"></div>
<div class="fullscreen"><img src="TemplateData/fullscreen.png" width="38" height="38" alt="Fullscreen" title="Fullscreen" onclick="SetFullscreen(1);" /></div>
<div class="title">UnityFlash</div>
</div>
<p class="footer">&laquo; created with <a href="http://unity3d.com/" title="Go to unity3d.com">Unity</a> &raquo;</p>
<script type='text/javascript'>
var Module = {
TOTAL_MEMORY: 134217728,
errorhandler: null, // arguments: err, url, line. This function must return 'true' if the error is handled, otherwise 'false'
compatibilitycheck: null,
dataUrl: "Release/WebDemo.data",
codeUrl: "Release/WebDemo.js",
memUrl: "Release/WebDemo.mem",
};
</script>
<script src="Release/UnityLoader.js"></script>
</body>
</html>

BIN
.github/images/screenshot-1.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 557 KiB

BIN
.github/images/screenshot-2.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 854 KiB

BIN
.github/images/screenshot-3.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 738 KiB

BIN
.github/images/title-icon.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 756 KiB

View File

@@ -0,0 +1,267 @@
## SwfClip
```csharp
// Occurs when clip changes
event Action<SwfClip> OnChangeClipEvent;
// Occurs when sequence changes
event Action<SwfClip> OnChangeSequenceEvent;
// Occurs when current frame changes
event Action<SwfClip> OnChangeCurrentFrameEvent;
```
```csharp
// Gets or sets the animation mesh renderer sorting layer
// [value] - The sorting layer
string sortingLayer { get; set; }
// Gets or sets the animation mesh renderer sorting order
// [value] - The sorting order
int sortingOrder { get; set; }
// Gets or sets the animation tint color
// [value] - The tint color
Color tint { get; set; }
// Gets or sets the animation asset (reset sequence and current frame)
// [value] - The animation asset
SwfClipAsset clip { get; set; }
// Gets or sets the animation sequence (reset current frame)
// [value] - The animation sequence
string sequence { get; set; }
// Gets or sets the animation current frame
// [value] - The animation current frame
int currentFrame { get; set; }
// Gets the current animation sequence frame count
// [value] - The frame count
int frameCount { get; }
// Gets the animation frame rate
// [value] - The frame rate
float frameRate { get; }
// Gets the current frame label count
// [value] - The frame label count
int currentLabelCount { get; }
```
```csharp
// Gets the current frame mesh bounding volume in local space (Since 1.3.8)
// [value] - The bounding volume in local space
Bounds currentLocalBounds { get; }
// Gets the current frame mesh bounding volume in world space (Since 1.3.8)
// [value] - The bounding volume in world space
Bounds currentWorldBounds { get; }
```
```csharp
// Rewind current sequence to begin frame
void ToBeginFrame();
// Rewind current sequence to end frame
void ToEndFrame();
// Rewind current sequence to previous frame
// [returns] - [true], if animation was rewound, [false] otherwise
bool ToPrevFrame();
// Rewind current sequence to next frame
// [returns] - [true], if animation was rewound, [false] otherwise
bool ToNextFrame();
// Gets the current frame label by index
// [returns] - The current frame label
// [index] - Current frame label index
string GetCurrentFrameLabel(int index);
```
## SwfClipController
```csharp
// Occurs when the controller stops played clip
event Action<SwfClipController> OnStopPlayingEvent;
// Occurs when the controller plays stopped clip
event Action<SwfClipController> OnPlayStoppedEvent;
// Occurs when the controller rewinds played clip
event Action<SwfClipController> OnRewindPlayingEvent;
```
```csharp
// Controller play modes
enum PlayModes {
// Forward play mode
Forward,
// Backward play mode
Backward
}
// Controller loop modes
enum LoopModes {
// Once loop mode
Once,
// Repeat loop mode
Loop
}
// Gets or sets a value indicating whether controller play after awake on scene
// [value] - [true] if auto play; otherwise, [false]
bool autoPlay { get; set; }
// Gets or sets a value indicating whether controller uses unscaled delta time
// [value] - [true] if uses unscaled delta time; otherwise, [false]
bool useUnscaledDt { get; set; }
// Gets or sets the controller rate scale
// [value] - The rate scale
float rateScale { get; set; }
// Gets or sets the controller group name
// [value] - The group name
string groupName { get; set; }
// Gets or sets the controller play mode
// [value] - The play mode
PlayModes playMode { get; set; }
// Gets or sets the controller loop mode
// [value] - The loop mode
LoopModes loopMode { get; set; }
// Gets the controller clip
// [value] - The clip
SwfClip clip { get; }
// Gets a value indicating whether controller is playing
// [value] - [true] if is playing; otherwise, [false]
bool isPlaying { get; }
// Gets a value indicating whether controller is stopped
// [value] - [true] if is stopped; otherwise, [false]
bool isStopped { get; }
```
```csharp
// Changes the animation frame with stops it
// [frame] - The new current frame
void GotoAndStop(int frame);
// Changes the animation sequence and frame with stops it
// [sequence] - The new sequence
// [frame] - The new current frame
void GotoAndStop(string sequence, int frame);
// Changes the animation frame with plays it
// [frame] - The new current frame
void GotoAndPlay(int frame);
// Changes the animation sequence and frame with plays it
// [sequence] - The new sequence
// [frame] - The new current frame
void GotoAndPlay(string sequence, int frame);
// Stop with specified rewind action
// [rewind] - If set to [true] rewind animation to begin frame
void Stop(bool rewind);
// Changes the animation sequence and stop controller with rewind
// [sequence] - The new sequence
void Stop(string sequence);
// Play with specified rewind action
// [rewind] - If set to [true] rewind animation to begin frame
void Play(bool rewind);
// Changes the animation sequence and play controller with rewind
// [sequence] - The new sequence
void Play(string sequence);
// Rewind animation to begin frame
void Rewind();
```
## SwfManager
```csharp
// Get cached manager instance from scene or create it (if allowed)
// [allow_create] - If set to [true] allow create
static SwfManager GetInstance(bool allow_create);
```
```csharp
// Get animation clip count on scene
// [value] - Clip count
int clipCount { get; }
// Get animation clip controller count on scene
// [value] - Clip controller count
int controllerCount { get; }
// Get or set a value indicating whether animation updates is paused
// [value] - [true] if is paused; otherwise, [false]
bool isPaused { get; set; }
// Get or set a value indicating whether animation updates is playing
// [value] - [true] if is playing; otherwise, [false]
bool isPlaying { get; set; }
// Get or set a value indicating whether animation updates uses unscaled delta time
// [value] - [true] if uses unscaled delta time; otherwise, [false]
bool useUnscaledDt { get; set; }
// Get or set the global animation rate scale
// [value] - Global rate scale
float rateScale { get; set; }
```
```csharp
// Pause animation updates
void Pause();
// Resume animation updates
void Resume();
// Pause the group of animations by name
// [group_name] - Group name
void PauseGroup(string group_name);
// Resume the group of animations by name
// [group_name] - Group name
void ResumeGroup(string group_name);
// Determines whether group of animations is paused
// [returns] - [true] if group is paused; otherwise, [false]
// [group_name] - Group name
bool IsGroupPaused(string group_name);
// Determines whether group of animations is playing
// [returns] - [true] if group is playing; otherwise, [false]
// [group_name] - Group name
bool IsGroupPlaying(string group_name);
// Set the group of animations use unscaled delta time
// [group_name] - Group name
// [yesno] - [true] if group will use unscaled delta time; otherwise, [false]
void SetGroupUseUnscaledDt(string group_name, bool yesno);
// Determines whether group of animations uses unscaled delta time
// [returns] - [true] if group uses unscaled delta time; otherwise, [false]
// [group_name] - Group name
bool IsGroupUseUnscaledDt(string group_name);
// Set the group of animations rate scale
// [group_name] - Group name
// [rate_scale] - Rate scale
void SetGroupRateScale(string group_name, float rate_scale);
// Get the group of animations rate scale
// [returns] - The group rate scale
// [group_name] - Group name
float GetGroupRateScale(string group_name);
```

View File

@@ -1,42 +1,42 @@
###### Version 1.3.18
### Version 1.3.18
* Fix frameCount working before Start
* Fix preview in Unity 2021
###### Version 1.3.17
### Version 1.3.17
* Fix 2019 warnings
* Force swf asset binary serialization
###### Version 1.3.16
### Version 1.3.16
* Minor promo fixes
###### Version 1.3.15
### Version 1.3.15
* Add optional bitmap trimming
* Fix preview leaks in the Editor mode
* Add warning notes about outdated assets
* Add log message about successfully converting
###### Version 1.3.14
### Version 1.3.14
* Fix 2018.3.2f1 compilation
###### Version 1.3.13
### Version 1.3.13
* Fix preview shutdown warning
###### Version 1.3.12
### Version 1.3.12
* Upgrade to minimal LTS version
* Fix anchor frame label detector
* More readable conversion warnings
###### Version 1.3.11
### Version 1.3.11
* Fix trial version in Unity 2017
* Fix warnings in Unity 2017
* Fix possible mesh leak after scene switch
###### Version 1.3.10
### Version 1.3.10
* Fix (conversion error: 'Error: scaleSelection: Argument number 1 is invalid.')
* Fix (Parsing swf error: Failed to read past end of stream)
* Fix rasterization error with vector graphics in buttons
###### Version 1.3.9
### Version 1.3.9
* Not save generated meshes in scene
* Fix (At line 908 of file "FTMain.jsfl": ReferenceError: ft is not defined)
* Fix warning on add missing components
@@ -44,7 +44,7 @@
* Replace shader "if" instruction to "step"
* Replace mask shader "if + discard" instruction to "clip"
###### Version 1.3.8
### Version 1.3.8
* Fix shape groups in tweens problems
* Fix drawing object shape problems
* Fix locked elements problem
@@ -58,74 +58,74 @@
* Remove excess "if" instruction from shaders
* Remove excess animation reimports
###### Version 1.3.7
### Version 1.3.7
* Fix multiple import
* Fix single frame optimization
###### Version 1.3.6
### Version 1.3.6
* Fix for scale very small vector items
* Big vector item optimization
* More yield instructions and extensions
###### Version 1.3.5
### Version 1.3.5
* Fix sprite import problem
###### Version 1.3.4
### Version 1.3.4
* Fix CS6 export problem
* Fix unity postprocessor problems
###### Version 1.3.3
### Version 1.3.3
* Fix undefined unusedItems in CS6
###### Version 1.3.2
### Version 1.3.2
* Fix bug custom scale export with small items optimization
###### Version 1.3.1
### Version 1.3.1
* Fix some Unity 5.5 deprecated functions
###### Version 1.3.0
### Version 1.3.0
* ETC separated alpha support
* Export animations with custom scale (for retina)
* New small vector scaled items optimization
###### Version 1.2.0
### Version 1.2.0
* Add Yield instructions for wait in coroutines(SwfWaitPlayStopped, SwfWaitRewindPlaying, SwfWaitStopPlaying)
* Add unscaled delta time support(for separate animations, groups of animations or for all)
* Fix guide type flash layers
* Some fixes for reconvert asset problem
###### Version 1.1.1
### Version 1.1.1
* Add conversion error by shape tween in CS6
* Fix life after death (problem about destroying with big lag by frame event)
###### Version 1.1.0
### Version 1.1.0
* Sequence separator is anchor frame label (not common frame label)
* SwfClip access to frame labels (currentLabelCount, GetCurrentFrameLabel)
* SwfClip events (OnChangeClipEvent, OnChangeSequenceEvent, OnChangeCurrentFrameEvent)
###### Version 1.0.0
### Version 1.0.0
* Initial asset store version
* Sources to dll
* Palette bitmaps support
###### Version 0.5.0
### Version 0.5.0
* Flash optimizer twicks
* Blending modes (except Alpha and Erase)
###### Version 0.4.0
### Version 0.4.0
* Clip groups
* Fix move assets bug
* Tint color for clips
* Animation API improvements
###### Version 0.3.0
### Version 0.3.0
* Preview for animation assets and clips
* Animation API improvements
* Memory optimizations
###### Version 0.2.0
### Version 0.2.0
* Export optimizations
* Export clips with export names
###### Version 0.1.0
### Version 0.1.0
* Initial alpha version

View File

@@ -0,0 +1,29 @@
Open your flash animation in Adobe Flash (CS6 or above).
![](./Images/user-guide-1.png)
Click the right button on movie clip which you want to export besides main timeline and go to the Properties.
![](./Images/user-guide-3.png)
Choose "Export for ActionScript" and set name for clip in "Class" field.
![](./Images/user-guide-4.png)
You can add **anchor** frame labels to separate timeline to different named sequences.
![](./Images/user-guide-2.png)
Run export script (_FlashTools/FlashExport/FlashExport.jsfl_) for your flash animation. The script optimizes an animation, rasterizes vector graphics and export .swf file which is compatible with the toolset.
![](./Images/user-guide-5.png)
![](./Images/user-guide-6.png)
Move exported .swf file to your unity project (You may find this .swf file at _export folder next to .fla file).
![](./Images/user-guide-7.png)
.swf file will be automatically converted to unity asset with proper settings. Open them to change texture packing settings (by default it uses settings from _"FlashTools/Resources/SwfSettings"_).
![](./Images/user-guide-8.png)
Now you can select exported clip and add it to scene or create a prefab.
![](./Images/user-guide-9.png)
In instance properties you can change any settings like a sorting layer, play mode, current frame and etc.
![](./Images/user-guide-10.png)
Enjoy!

Binary file not shown.

After

Width:  |  Height:  |  Size: 489 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 256 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 373 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 616 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 541 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 388 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 211 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 207 KiB

21
LICENSE.md Normal file
View File

@@ -0,0 +1,21 @@
MIT License
Copyright (C) 2016-2022, by Matvey Cherevko (blackmatov@gmail.com)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

46
README.md Normal file
View File

@@ -0,0 +1,46 @@
![](.github/images/title-icon.png)
# Flash Animation Toolset
> Convert your flash animation for Unity easy!
[Trial Version](https://assetstore.unity.com/packages/tools/animation/flash-animation-toolset-trial-73896) |
[Full Version](https://assetstore.unity.com/packages/tools/animation/flash-animation-toolset-73323) |
[Forum](https://forum.unity.com/threads/1-3-15-flash-animation-toolset.440085) |
[Web Demo](.github/demo) |
[User Guide](Assets/FlashTools/Docs/GUIDE.md) |
[API Reference](Assets/FlashTools/Docs/API.md) |
[Changelog](Assets/FlashTools/Docs/CHANGELOG.md)
## Features
- Support all transformations like 'rotation', 'skew' and 'scale' (except 3D)
- Support all tweens(classic, motion and etc), keyframes and layers
- Support mask layers
- Support bitmap and vector graphics
- Support all clip color effects like 'brightness', 'tint', 'alpha' and etc
- Support most blending modes (all except Alpha and Erase)
- Simple runtime API for controlling your animations in Unity
- Automatic packing texture atlases of animations with different settings
- Great performance with zero allocations in update loop
- Frame labels to separate sequences in one timeline
- Export marked "for export" clips and main timeline
- Live preview of animations in the Unity editor
Supports Unity 2017.4 (LTS) and newer, both Personal and Pro. Full C# source code included.
Leave your rating for this Asset. It is very important for me and the development of the project :) Thank you!
## Usage video
<iframe width="520" height="360" src="https://www.youtube.com/embed/uE_XRWZ5KHA" frameborder="0" allowfullscreen></iframe>
## Screenshots
![](.github/images/screenshot-1.png)
![](.github/images/screenshot-2.png)
![](.github/images/screenshot-3.png)
## [License (MIT)](./LICENSE.md)
Samples use "Creative Commons CC0 1.0 Universal License" animations from [Glitch game](http://www.glitchthegame.com/public-domain-game-art)