using UnityEngine; namespace Es.WaveformProvider.Sample { [RequireComponent(typeof(Collider), typeof(Rigidbody))] public class CollisionWaveInput : MonoBehaviour { [SerializeField] private Texture2D waveform; [SerializeField] [Range(0f, 1f)] private float inputScaleFitter = 0.01f; [SerializeField] [Range(0f, 1f)] private float strength = 1f; private Rigidbody rigidbody; private void Awake() { rigidbody = GetComponent(); } private void OnCollisionEnter(Collision collision) { WaveInput(collision); } public void OnCollisionStay(Collision collision) { WaveInput(collision); } private void WaveInput(Collision collision) { ContactPoint[] contacts = collision.contacts; for (int i = 0; i < contacts.Length; i++) { ContactPoint contactPoint = contacts[i]; WaveConductor component = contactPoint.otherCollider.GetComponent(); if (component != null) { component.Input(waveform, contactPoint.point, rigidbody.velocity.magnitude * rigidbody.mass * inputScaleFitter, strength); } } } } }