Code Monkey home page Code Monkey logo

urmotion's Introduction

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 UnityEngine;
using System.Collections;
using UrMotion;

Examples

Simply uniform move

g.MotionX().Velocity(3f);

velocity_x

Simply uniform move (Moving Y)

g.MotionY().Velocity(3f);

velocity_y

Simply uniform move (Moving X & Y)

g.MotionP().Velocity(new Vector2(3f, 2f));

velocity_xy

Accel move

g.MotionX().Accel(0.3f);

accel_x

Accel move with initial speed

g.MotionX().Velocity(1f).Accel(0.3f);

accel_x_with_init

g.MotionX().Velocity(-6f).Accel(0.3f);

accel_with_init_2

Accel by ratio

g.MotionX().AccelByRatio(10f, 0.9f);

accel_by_ratio

Sin move

g.MotionX().Sin(83f, 0.5f);

sin

Circular move

g.MotionP().Circular(83f, 0.5f);

circular

Lissajous move

g.MotionP().Lissajous(83f, 51f, 0.6f, 1.2f, 0f);

lissajous

Aiming with uniform move

An aiming method produce a velocity that makes a GameObject go toward the specified position.

g.MotionP().AimAt(p, 10f);

aim

Aiming with common ratio

g.MotionP().AimRatioAt(p, 0.15f);

aim_ratio

Aiming with spring move

g.MotionP().AimSpringAt(p, 0.15f, 0.8f);

aim_spring

Aiming with exponential interpolation

g.MotionP().AimExpoAt(p, 0.15f);

aim_expo

Aiming with critically damped spring smoothing

g.MotionP().AimCriticalDampingAt(p, 0.15f);

aim_critical

Perlin noise

g.MotionP().Perlin(new Vector2(0.4f, 0.8f)).AmplifyComponents(new Vector2(3f, 2f));

perlin

Fractional brownian motion

g.MotionP().Fbm(new Vector2(0.4f, 0.8f), 3).AmplifyComponents(new Vector2(3f, 2f));

fbm

Timed parameter

Change velocity by time with sin curve.

g.MotionX().Velocity(Source.Float.Sin(2f, 1f).Offset(2f));

velocity_sin

Change radius by time with sin curve.

g.MotionX().Sin(Source.Float.Sin(51f, 0.5f).Offset(51f), 1f);

radius_sin

Custom parameter

You can use any of the following types as a motion parameter.

  • V
  • IEnumerator<V>
  • IEnumerable<V>
  • Func<V>

V is: float, Vector2, Vector3 or Vector4

g.MotionX().Velocity(() => Random.Range(-10f, 10f));

own_function

Lifetime control

Finish velocity effect after 15fr.

g.MotionX().Accel(0.3f).Lifetime(15f);

lifetime

Start velocity effect after 15fr.

g.MotionX().Accel(0.3f).StartDelay(15f);

delay

Finish velocity effect if it magnitude is less than 0.01f. Then, destroy a GameObject.

g.MotionX().AccelByRatio(10f, 0.9f).LiveThreshold(0.01f).Next(() => Destroy(g));

complete_velocity

Complex motion examples

Parabola

g.MotionX().Velocity(6f);
g.MotionY().Velocity(18f).Accel(-0.98f);

parabola

Spiral

g.MotionP().Circular(Source.Float.Sin(51f, 0.5f).Offset(51f), 2f);

spiral

Lissajous + Lissajous

g.MotionP().Lissajous(83f, 51f, 0.6f, 1.2f, 0f).Lissajous(24f, 32f, 2.4f, 0.8f, 0f);

lissajous lissajous

Lissajous with directon

var vel = default(IEnumerator<Vector2>);
g.MotionP().Lissajous(83f, 51f, 0.6f, 1.2f, 0f).Capture(out vel);
g.MotionR().AimRatioAt(vel.ToAngle().Offset(-90f), 1f);

lissajous direction

Floating scaling

g.MotionS().AccelByRatio(Vector2.one * 0.4f, 0.85f).Sin(Vector2.one * 0.5f, 0.5f);

floating_scaling

Aiming + Ciruclular move

var vel = default(IEnumerator<Vector2>);
var m = g.MotionP();
m.AimSpringAt(p, 0.1f, 0.45f).Capture(out vel);
m.Circular(vel.Magnitude().Amplify(2f), 2f);

aim circular

Scaling by velocity

var vel = default(IEnumerator<Vector2>);
g.MotionP().AimExpoAt(p, 0.15f).Capture(out vel);
g.MotionS().AimSpringAt(vel.Magnitude().Amplify(0.075f).Offset(1f).ToVector2(), 0.12f, 0.7f);

scaling_by_velocity

Circular + Noise

g.MotionP().Circular(83f, 0.25f).Fbm(new Vector2(2f, 3f), 3).Amplify(6f);

circular noise

Follow move

Func<Vector2> p = () => GetMousePosition();
g.MotionP().AimCriticalDampingAt(p, 0.8f);

follow

Follow + Circular move

Func<Vector2> p = () => GetMousePosition();
g.MotionP().AimCriticalDampingAt(p, 0.8f).Circular(83f, 1.5f);

follow circular

Follow + Follow + Follow

System.Func<Vector2> gp = () => new Vector2(g.transform.localPosition.x, g.transform.localPosition.y);
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);

follow follow

Aiming + Noise

var vel = default(IEnumerator<Vector2>);
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));

aim noise

Spiral #2

for (var i = 0; i < 12; ++i) {
	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));
}

spiral_2

License

Copyright 2016 Oink Games, Inc. and other contributors.

Code licensed under the MIT License: http://opensource.org/licenses/MIT

urmotion's People

Contributors

beinteractive avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

urmotion's Issues

doesn't seem to work in Unity 2020?

I tried including URMotion and Example scenes and got a bunch of errors when trying to play the scene. Unity kindly enough didn't even provide good error messages? Update to work with latest versions of Unity? Seems like a really cool asset

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.