Files
Fishing2/Assets/UnityStandardAssets/Effects/AfterburnerPhysicsForce.cs
2025-05-10 12:49:47 +08:00

75 lines
2.1 KiB
C#

using UnityEngine;
namespace UnityStandardAssets.Effects
{
[RequireComponent(typeof(SphereCollider))]
public class AfterburnerPhysicsForce : MonoBehaviour
{
public float effectAngle = 15f;
public float effectWidth = 1f;
public float effectDistance = 10f;
public float force = 10f;
private Collider[] m_Cols;
private SphereCollider m_Sphere;
private void OnEnable()
{
m_Sphere = GetComponent<Collider>() as SphereCollider;
}
private void FixedUpdate()
{
m_Cols = Physics.OverlapSphere(transform.position + m_Sphere.center, m_Sphere.radius);
for (int i = 0; i < m_Cols.Length; i++)
{
if (m_Cols[i].attachedRigidbody != null)
{
Vector3 current = transform.InverseTransformPoint(m_Cols[i].transform.position);
current = Vector3.MoveTowards(current, new Vector3(0f, 0f, current.z), effectWidth * 0.5f);
float value = Mathf.Abs(Mathf.Atan2(current.x, current.z) * 57.29578f);
float num = Mathf.InverseLerp(effectDistance, 0f, current.magnitude);
num *= Mathf.InverseLerp(effectAngle, 0f, value);
Vector3 vector = m_Cols[i].transform.position - transform.position;
m_Cols[i].attachedRigidbody.AddForceAtPosition(vector.normalized * force * num, Vector3.Lerp(m_Cols[i].transform.position, transform.TransformPoint(0f, 0f, current.z), 0.1f));
}
}
}
private void OnDrawGizmosSelected()
{
if (m_Sphere == null)
{
m_Sphere = GetComponent<Collider>() as SphereCollider;
}
m_Sphere.radius = effectDistance * 0.5f;
m_Sphere.center = new Vector3(0f, 0f, effectDistance * 0.5f);
Vector3[] array = new Vector3[4]
{
Vector3.up,
-Vector3.up,
Vector3.right,
-Vector3.right
};
Vector3[] array2 = new Vector3[4]
{
-Vector3.right,
Vector3.right,
Vector3.up,
-Vector3.up
};
Gizmos.color = new Color(0f, 1f, 0f, 0.5f);
for (int i = 0; i < 4; i++)
{
Vector3 vector = transform.position + transform.rotation * array[i] * effectWidth * 0.5f;
Vector3 vector2 = transform.TransformDirection(Quaternion.AngleAxis(effectAngle, array2[i]) * Vector3.forward);
Gizmos.DrawLine(vector, vector + vector2 * m_Sphere.radius * 2f);
}
}
}
}