54 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C#
		
	
	
	
| using UnityEngine;
 | |
| 
 | |
| //This class animates a gameobject along the spline at a specific speed. 
 | |
| //Also it demonstrates how to use the 'custom value feature'. In this example it alters
 | |
| //the color of an attached mesh renderer. The custom values for the nodes can be set via script
 | |
| //or in the Inspector - simply click on a gameObject that has the SplineNode-component 
 | |
| //attached to it.
 | |
| [AddComponentMenu("")]
 | |
| [RequireComponent( typeof( MeshRenderer ) )]
 | |
| public class SplineAnimatorCustomValue : MonoBehaviour
 | |
| {
 | |
| 	public Spline spline;
 | |
| 	
 | |
| 	public WrapMode wrapMode = WrapMode.Clamp;
 | |
| 	
 | |
| 	public float speed = 1f;
 | |
| 	public float offSet = 0f;
 | |
| 	
 | |
| 	public float passedTime = 0f;
 | |
| 	
 | |
| 	void Update( ) 
 | |
| 	{
 | |
| 		passedTime += Time.deltaTime * speed;
 | |
| 		
 | |
| 		float clampedParam = WrapValue( passedTime + offSet, 0f, 1f, wrapMode );
 | |
| 		
 | |
| 		//Interpolate a custom value according to the interpolation type and spline settings
 | |
| 		//The custom values can be set in the SplineNode scripts or in the inspector
 | |
| 		float customValue = spline.GetCustomValueOnSpline( clampedParam );
 | |
| 		
 | |
| 		transform.position = spline.GetPositionOnSpline( clampedParam );
 | |
| 		transform.rotation = spline.GetOrientationOnSpline( clampedParam );
 | |
| 		
 | |
| 		GetComponent<Renderer>().material.color = Color.red * (1f-customValue) + Color.blue * (customValue);
 | |
| 	}
 | |
| 	
 | |
| 	private float WrapValue( float v, float start, float end, WrapMode wMode )
 | |
| 	{
 | |
| 		switch( wMode )
 | |
| 		{
 | |
| 		case WrapMode.Clamp:
 | |
| 		case WrapMode.ClampForever:
 | |
| 			return Mathf.Clamp( v, start, end );
 | |
| 		case WrapMode.Default:
 | |
| 		case WrapMode.Loop:
 | |
| 			return Mathf.Repeat( v, end - start ) + start;
 | |
| 		case WrapMode.PingPong:
 | |
| 			return Mathf.PingPong( v, end - start ) + start;
 | |
| 		default:
 | |
| 			return v;
 | |
| 		}
 | |
| 	}
 | |
| }
 |