using UnityEngine; public class MotionSampleDisplay : MonoBehaviour { [SerializeField] GameObject left, right; public Sprite sprite; public float timeout; private float start; private bool isInit; public MotionNote caller; private float acceleration; private float distance = 1.5f; private Vector3 localScaleLR = new Vector3(0.5f, 0.5f, 0), initialPos; private void Start() { var obj = GameObject.Find("CoordinateMapView").transform; initialPos = obj.position; transform.position = initialPos; transform.SetParent(obj); left .transform.position = initialPos; right.transform.position = initialPos; } private void OnEnable() { acceleration = 2 * distance / Mathf.Pow(timeout, 2); isInit = false; left .GetComponent().sprite = sprite; right.GetComponent().sprite = sprite; left .transform.localScale = localScaleLR; right.transform.localScale = localScaleLR; left .transform.position = initialPos + Vector3.left * distance; right.transform.position = initialPos + Vector3.right * distance; } private void Update() { var current = Time.time * 1000; if (!isInit) { isInit = true; start = current; } var delta = current - start; if (delta > timeout) { Destroy(gameObject); return; } var location = distance - acceleration / 2 * Mathf.Pow(delta, 2); left .transform.position = initialPos + Vector3.left * location; right.transform.position = initialPos + Vector3.right * location; } }