51 lines
1.1 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|