Files
2026-03-04 10:03:45 +08:00

51 lines
1.1 KiB
C#

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<Rigidbody>();
}
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<WaveConductor>();
if (component != null)
{
component.Input(waveform, contactPoint.point, rigidbody.velocity.magnitude * rigidbody.mass * inputScaleFitter, strength);
}
}
}
}
}