|
|
- using UnityEngine;
- using System.Collections;
- using System.Collections.Generic;
-
- // You can execute this in the editor as long as you don't instantiate the material
- //[ExecuteInEditMode]
- public class Smear : MonoBehaviour
- {
- Queue<Vector3> m_recentPositions = new Queue<Vector3>();
-
- public int FramesBufferSize = 0;
-
- public Renderer Renderer = null;
-
- private Material m_instancedMaterial;
- private Material InstancedMaterial
- {
- get { return m_instancedMaterial; }
- set { m_instancedMaterial = value; }
- }
-
- private void Start()
- {
- // Instantiate the material so every object has a unique smear effect
- InstancedMaterial = Renderer.material;
-
- // Use this instead if you want to affect all objects at the same time or if you want to run in the editor
- //InstancedMaterial = Renderer.sharedMaterial;
- }
-
- private void LateUpdate()
- {
- // Feed the previous position in the queue to the shader
- if ( m_recentPositions.Count > FramesBufferSize )
- InstancedMaterial.SetVector( "_PrevPosition", m_recentPositions.Dequeue() );
-
- // Feed the current anchor position to the shader
- InstancedMaterial.SetVector( "_Position", transform.position );
- m_recentPositions.Enqueue( transform.position );
- }
- }
|