Feel 5.9.1
The best way to improve your game's feel and make it extra juicy
Loading...
Searching...
No Matches
MoreMountains.Tools.MMSquashAndStretch Class Reference

This component will automatically update scale and rotation Put it one level below the top, and have the model one level below that Hierarchy should be as follows : More...

Inheritance diagram for MoreMountains.Tools.MMSquashAndStretch:

Public Types

enum  Timescales { Regular , Unscaled }
enum  Modes { Rigidbody , Rigidbody2D , Position }

Public Member Functions

virtual void Squash (float duration, float intensity)
 Triggered either directly or via the AutoSquash setting, this squashes the object (usually after a contact / stop)

Public Attributes

Modes Mode = Modes.Position
 the possible ways to get velocity from
Timescales Timescale = Timescales.Regular
 whether we should use deltaTime or unscaledDeltaTime
float Intensity = 0.02f
 the intensity of the squash and stretch
float MaximumVelocity = 1f
 the maximum velocity of your parent object, used to remap the computed one
Vector3 MinimumScale = new Vector3(0.5f, 0.5f, 0.5f)
 the minimum scale to apply to this object
Vector3 MaximumScale = new Vector3(2f, 2f, 2f)
 the maximum scale to apply to this object
bool RescaleX = true
 whether or not to rescale on the x axis
bool RescaleY = true
 whether or not to rescale on the y axis
bool RescaleZ = true
 whether or not to rescale on the z axis
bool RotateToMatchDirection = true
 whether or not to rotate the transform to align with the current direction
bool AutoSquashOnStop = false
 if this is true, the object will squash once velocity goes below the specified threshold
AnimationCurve SquashCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1f), new Keyframe(1, 0f))
 the curve to apply when squashing the object (this describes scale on x and z, will be inverted for y to maintain mass)
float SquashVelocityThreshold = 0.1f
 the velocity threshold after which a squash can be triggered if the object stops
Vector2 SquashDuration = new Vector2(0.25f, 0.5f)
 the maximum duration of the squash (will be reduced if velocity is low)
Vector2 SquashIntensity = new Vector2(0f, 1f)
 the maximum intensity of the squash
bool Spring = false
 whether or not to add extra spring to the squash and stretch
float SpringDamping = 0.3f
 the damping to apply to the spring
float SpringFrequency = 3f
 the spring's frequency
Vector3 Velocity
 the current velocity of the parent object
float RemappedVelocity
 the remapped velocity
float VelocityMagnitude
 the current velocity magnitude

Protected Member Functions

virtual void Start ()
 On start, we initialize our component.
virtual void Initialization ()
 Stores the initial scale, grabs the rigidbodies (or tries to), as well as the parent and child.
virtual void LateUpdate ()
 On late update, we apply our squash and stretch effect.
virtual void SquashAndStretch ()
 Computes velocity and applies the effect.
virtual void ComputeVelocityAndDirection ()
 Determines the current velocity and direction of the parent object.
virtual void ComputeNewRotation ()
 Computes a new rotation for both this object and the child.
virtual void ComputeNewLocalScale ()
 Computes a new local scale for this object.
virtual void StorePreviousPosition ()
 Stores the previous position of the parent to compute velocity.

Protected Attributes

Rigidbody _rigidbody
Transform _childTransform
Transform _parentTransform
Vector3 _direction
Vector3 _previousPosition
Vector3 _newLocalScale
Vector3 _initialScale
Quaternion _newRotation = Quaternion.identity
Quaternion _deltaRotation
float _squashStartedAt = 0f
bool _squashing = false
float _squashIntensity
float _squashDuration
bool _movementStarted = false
float _lastVelocity = 0f
Vector3 _springScale
Vector3 _springVelocity = Vector3.zero

Properties

virtual float TimescaleTime [get]
virtual float TimescaleDeltaTime [get]

Detailed Description

This component will automatically update scale and rotation Put it one level below the top, and have the model one level below that Hierarchy should be as follows :

Parent (where the logic (and optionnally rigidbody lies)

Make sure this intermediary layer only has one child If movement feels glitchy make sure your rigidbody is on Interpolate

Member Enumeration Documentation

◆ Modes

Enumerator
Rigidbody 
Rigidbody2D 
Position 

◆ Timescales

Enumerator
Regular 
Unscaled 

Member Function Documentation

◆ ComputeNewLocalScale()

virtual void MoreMountains.Tools.MMSquashAndStretch.ComputeNewLocalScale ( )
protectedvirtual

Computes a new local scale for this object.

◆ ComputeNewRotation()

virtual void MoreMountains.Tools.MMSquashAndStretch.ComputeNewRotation ( )
protectedvirtual

Computes a new rotation for both this object and the child.

◆ ComputeVelocityAndDirection()

virtual void MoreMountains.Tools.MMSquashAndStretch.ComputeVelocityAndDirection ( )
protectedvirtual

Determines the current velocity and direction of the parent object.

◆ Initialization()

virtual void MoreMountains.Tools.MMSquashAndStretch.Initialization ( )
protectedvirtual

Stores the initial scale, grabs the rigidbodies (or tries to), as well as the parent and child.

◆ LateUpdate()

virtual void MoreMountains.Tools.MMSquashAndStretch.LateUpdate ( )
protectedvirtual

On late update, we apply our squash and stretch effect.

◆ Squash()

virtual void MoreMountains.Tools.MMSquashAndStretch.Squash ( float duration,
float intensity )
virtual

Triggered either directly or via the AutoSquash setting, this squashes the object (usually after a contact / stop)

Parameters
duration
intensity

◆ SquashAndStretch()

virtual void MoreMountains.Tools.MMSquashAndStretch.SquashAndStretch ( )
protectedvirtual

Computes velocity and applies the effect.

◆ Start()

virtual void MoreMountains.Tools.MMSquashAndStretch.Start ( )
protectedvirtual

On start, we initialize our component.

◆ StorePreviousPosition()

virtual void MoreMountains.Tools.MMSquashAndStretch.StorePreviousPosition ( )
protectedvirtual

Stores the previous position of the parent to compute velocity.

Member Data Documentation

◆ _childTransform

Transform MoreMountains.Tools.MMSquashAndStretch._childTransform
protected

◆ _deltaRotation

Quaternion MoreMountains.Tools.MMSquashAndStretch._deltaRotation
protected

◆ _direction

Vector3 MoreMountains.Tools.MMSquashAndStretch._direction
protected

◆ _initialScale

Vector3 MoreMountains.Tools.MMSquashAndStretch._initialScale
protected

◆ _lastVelocity

float MoreMountains.Tools.MMSquashAndStretch._lastVelocity = 0f
protected

◆ _movementStarted

bool MoreMountains.Tools.MMSquashAndStretch._movementStarted = false
protected

◆ _newLocalScale

Vector3 MoreMountains.Tools.MMSquashAndStretch._newLocalScale
protected

◆ _newRotation

Quaternion MoreMountains.Tools.MMSquashAndStretch._newRotation = Quaternion.identity
protected

◆ _parentTransform

Transform MoreMountains.Tools.MMSquashAndStretch._parentTransform
protected

◆ _previousPosition

Vector3 MoreMountains.Tools.MMSquashAndStretch._previousPosition
protected

◆ _rigidbody

Rigidbody MoreMountains.Tools.MMSquashAndStretch._rigidbody
protected

◆ _springScale

Vector3 MoreMountains.Tools.MMSquashAndStretch._springScale
protected

◆ _springVelocity

Vector3 MoreMountains.Tools.MMSquashAndStretch._springVelocity = Vector3.zero
protected

◆ _squashDuration

float MoreMountains.Tools.MMSquashAndStretch._squashDuration
protected

◆ _squashing

bool MoreMountains.Tools.MMSquashAndStretch._squashing = false
protected

◆ _squashIntensity

float MoreMountains.Tools.MMSquashAndStretch._squashIntensity
protected

◆ _squashStartedAt

float MoreMountains.Tools.MMSquashAndStretch._squashStartedAt = 0f
protected

◆ AutoSquashOnStop

bool MoreMountains.Tools.MMSquashAndStretch.AutoSquashOnStop = false

if this is true, the object will squash once velocity goes below the specified threshold

◆ Intensity

float MoreMountains.Tools.MMSquashAndStretch.Intensity = 0.02f

the intensity of the squash and stretch

◆ MaximumScale

Vector3 MoreMountains.Tools.MMSquashAndStretch.MaximumScale = new Vector3(2f, 2f, 2f)

the maximum scale to apply to this object

◆ MaximumVelocity

float MoreMountains.Tools.MMSquashAndStretch.MaximumVelocity = 1f

the maximum velocity of your parent object, used to remap the computed one

◆ MinimumScale

Vector3 MoreMountains.Tools.MMSquashAndStretch.MinimumScale = new Vector3(0.5f, 0.5f, 0.5f)

the minimum scale to apply to this object

◆ Mode

Modes MoreMountains.Tools.MMSquashAndStretch.Mode = Modes.Position

the possible ways to get velocity from

◆ RemappedVelocity

float MoreMountains.Tools.MMSquashAndStretch.RemappedVelocity

the remapped velocity

◆ RescaleX

bool MoreMountains.Tools.MMSquashAndStretch.RescaleX = true

whether or not to rescale on the x axis

◆ RescaleY

bool MoreMountains.Tools.MMSquashAndStretch.RescaleY = true

whether or not to rescale on the y axis

◆ RescaleZ

bool MoreMountains.Tools.MMSquashAndStretch.RescaleZ = true

whether or not to rescale on the z axis

◆ RotateToMatchDirection

bool MoreMountains.Tools.MMSquashAndStretch.RotateToMatchDirection = true

whether or not to rotate the transform to align with the current direction

◆ Spring

bool MoreMountains.Tools.MMSquashAndStretch.Spring = false

whether or not to add extra spring to the squash and stretch

◆ SpringDamping

float MoreMountains.Tools.MMSquashAndStretch.SpringDamping = 0.3f

the damping to apply to the spring

◆ SpringFrequency

float MoreMountains.Tools.MMSquashAndStretch.SpringFrequency = 3f

the spring's frequency

◆ SquashCurve

AnimationCurve MoreMountains.Tools.MMSquashAndStretch.SquashCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1f), new Keyframe(1, 0f))

the curve to apply when squashing the object (this describes scale on x and z, will be inverted for y to maintain mass)

◆ SquashDuration

Vector2 MoreMountains.Tools.MMSquashAndStretch.SquashDuration = new Vector2(0.25f, 0.5f)

the maximum duration of the squash (will be reduced if velocity is low)

◆ SquashIntensity

Vector2 MoreMountains.Tools.MMSquashAndStretch.SquashIntensity = new Vector2(0f, 1f)

the maximum intensity of the squash

◆ SquashVelocityThreshold

float MoreMountains.Tools.MMSquashAndStretch.SquashVelocityThreshold = 0.1f

the velocity threshold after which a squash can be triggered if the object stops

◆ Timescale

Timescales MoreMountains.Tools.MMSquashAndStretch.Timescale = Timescales.Regular

whether we should use deltaTime or unscaledDeltaTime

◆ Velocity

Vector3 MoreMountains.Tools.MMSquashAndStretch.Velocity

the current velocity of the parent object

◆ VelocityMagnitude

float MoreMountains.Tools.MMSquashAndStretch.VelocityMagnitude

the current velocity magnitude

Property Documentation

◆ TimescaleDeltaTime

virtual float MoreMountains.Tools.MMSquashAndStretch.TimescaleDeltaTime
get

◆ TimescaleTime

virtual float MoreMountains.Tools.MMSquashAndStretch.TimescaleTime
get

The documentation for this class was generated from the following file: