Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- public class Sticker : MonoBehaviour {
- public Transform stickOne;
- public Transform stickTwo;
- new public LineRenderer renderer;
- public float MovementSpeed;
- public float Frequency = 1f;
- public float Amplitude = 0.2f;
- public float SineLerpPower = 1.65f;
- public float SineSpeed = 6f;
- void Start() {
- renderer = GetComponent<LineRenderer>();
- renderer.numPositions = 100;
- }
- float mapRange( float value, float low1, float high1, float low2, float high2 ) {
- return low2 + ( high2 - low2 ) * ( value - low1 ) / ( high1 - low1 );
- }
- void Update() {
- var h1 = Input.GetAxis( "Horizontal" );
- var h2 = Input.GetAxis( "Horizontal2" );
- var v1 = Input.GetAxis( "Vertical" );
- var v2 = Input.GetAxis( "Vertical2" );
- stickOne.transform.position += new Vector3( h1, v1 ) * MovementSpeed * Time.deltaTime;
- stickTwo.transform.position += new Vector3( h2, v2 ) * MovementSpeed * Time.deltaTime;
- var diff = stickTwo.position - stickOne.position;
- var middle = stickOne.transform.position + diff / 2f;
- var maxDist = diff.magnitude;
- var freq = mapRange( diff.magnitude, 20, 1, 0, 2 ) * 0.5f;
- freq = Mathf.Clamp( freq, 0, 2 );
- var step = diff / ( renderer.numPositions - 1 );
- for ( int i = 0; i < renderer.numPositions; i++ ) {
- var p = stickOne.transform.position + ( step * i );
- var normal = new Vector3( diff.y, -diff.x );
- normal.Normalize();
- var sin = Mathf.Sin( ( i * freq ) + Time.realtimeSinceStartup * SineSpeed ) * Amplitude;
- var distToMiddle = Mathf.Pow( ( middle - p ).magnitude, SineLerpPower );
- sin = Mathf.Lerp( sin, 0, ((1f / maxDist) * distToMiddle) );
- p += normal * sin;
- renderer.SetPosition( i, p );
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement