using UnityEngine; 
 | 
using System.Collections; 
 | 
  
 | 
  
 | 
public class PingPongRotation:MonoBehaviour { 
 | 
  
 | 
    public Transform reference; 
 | 
    public Vector3 amplitue; 
 | 
    public float speed; 
 | 
  
 | 
    Vector3 referenceEuler = Vector3.zero; 
 | 
  
 | 
    void OnEnable() { 
 | 
        referenceEuler = reference == null ? this.transform.localEulerAngles : reference.localEulerAngles; 
 | 
    } 
 | 
  
 | 
    float x = 0f; 
 | 
    float y = 0f; 
 | 
    float z = 0f; 
 | 
    void LateUpdate() { 
 | 
  
 | 
        if(Mathf.Abs(amplitue.x) > 0.001f) { 
 | 
            x = referenceEuler.x - amplitue.x * 0.5f + Mathf.PingPong(Time.time * speed,amplitue.x); 
 | 
        } 
 | 
        else { 
 | 
            x = referenceEuler.x; 
 | 
        } 
 | 
  
 | 
        if(Mathf.Abs(amplitue.y) > 0.001f) { 
 | 
            y = referenceEuler.y - amplitue.y * 0.5f + Mathf.PingPong(Time.time * speed,amplitue.y); 
 | 
        } 
 | 
        else { 
 | 
            y = referenceEuler.y; 
 | 
        } 
 | 
  
 | 
        if(Mathf.Abs(amplitue.z) > 0.001f) { 
 | 
            z = referenceEuler.z - amplitue.z * 0.5f + Mathf.PingPong(Time.time * speed,amplitue.z); 
 | 
        } 
 | 
        else { 
 | 
            z = referenceEuler.z; 
 | 
        } 
 | 
  
 | 
        this.transform.localEulerAngles = new Vector3(x,y,z); 
 | 
    } 
 | 
  
 | 
} 
 |