A flexible motion engine for non time-based animation in Unity
UrMotion (Your motion) is a brand new simple & flexible motion engine for Unity. It enables you to create non time-based complex animations on your script easy and fast.
To start using UrMotion, copy Assets/UrMotion directoy to your project and write using UrMotion; in your code.
using System.Collections;
using UrMotion;
Examples
Simply uniform move
Simply uniform move (Moving Y)
Simply uniform move (Moving X & Y)
Accel move
Accel move with initial speed
Accel by ratio
Sin move
Circular move
Lissajous move
Aiming with uniform move
An aiming method produce a velocity that makes a GameObject go toward the specified position.
Aiming with common ratio
Aiming with spring move
Aiming with exponential interpolation
Aiming with critically damped spring smoothing
Perlin noise
Fractional brownian motion
Timed parameter
Change velocity by time with sin curve.
Change radius by time with sin curve.
Custom parameter
You can use any of the following types as a motion parameter.
VIEnumeratorIEnumerableFunc
V is: float, Vector2, Vector3 or Vector4
Lifetime control
Finish velocity effect after 15fr.
Start velocity effect after 15fr.
Finish velocity effect if it magnitude is less than 0.01f. Then, destroy a GameObject.
Complex motion examples
Parabola
g.MotionY().Velocity(18f).Accel(-0.98f);
Spiral
Lissajous + Lissajous
Lissajous with directon
g.MotionP().Lissajous(83f, 51f, 0.6f, 1.2f, 0f).Capture(out vel);
g.MotionR().AimRatioAt(vel.ToAngle().Offset(-90f), 1f);
Floating scaling
Aiming + Ciruclular move
var m = g.MotionP();
m.AimSpringAt(p, 0.1f, 0.45f).Capture(out vel);
m.Circular(vel.Magnitude().Amplify(2f), 2f);
Scaling by velocity
g.MotionP().AimExpoAt(p, 0.15f).Capture(out vel);
g.MotionS().AimSpringAt(vel.Magnitude().Amplify(0.075f).Offset(1f).ToVector2(), 0.12f, 0.7f);
Circular + Noise
Follow move
g.MotionP().AimCriticalDampingAt(p, 0.8f);
Follow + Circular move
g.MotionP().AimCriticalDampingAt(p, 0.8f).Circular(83f, 1.5f);
Follow + Follow + Follow
g.MotionP().AimCriticalDampingAt(p, 0.8f);
f1.MotionP().AimCriticalDampingAt(gp, 0.3f).StartDelay(6f).AccelByRatio(new Vector2(Random.Range(-1f, 1f), Random.Range(-1f, 1f)) * 20f, 0.9f);
f2.MotionP().AimCriticalDampingAt(gp, 0.2f).StartDelay(9f).AccelByRatio(new Vector2(Random.Range(-1f, 1f), Random.Range(-1f, 1f)) * 15f, 0.9f);
Aiming + Noise
var m = g.MotionP();
m.AimSpringAt(p, 0.1f, 0.45f).Capture(out vel);
m.Perlin(new Vector2(7f, 11f)).Amplify(vel.Magnitude().Amplify(1.2f));
Spiral #2
g = GameObject.Instantiate(prefab);
g.transform.SetParent(prefab.transform.parent);
g.transform.localPosition = Vector3.zero;
g.transform.localScale = Vector3.one;
var angle = 30f * i;
var radius = Velocity.AccelByRatio(218f, Source.Constant(0.92f)).Offset(83f);
var speed = Velocity.AccelByRatio(0.75f, Source.Constant(0.94f)).Offset(0.01f);
g.MotionP().Circular(radius, speed).Angle(angle).Fbm(new Vector2(0f, 1f), 3).AmplifyComponents(new Vector2(0f, 0.3f));
}
License
Copyright 2016 Oink Games, Inc. and other contributors.
Code licensed under the MIT License: http://opensource.org/licenses/MIT