Files
2026-02-21 16:45:37 +08:00

43 lines
949 B
C#

using UnityEngine;
public class Bouyancy : MonoBehaviour
{
public float waterLevel;
public float floatHeight;
public Vector3 buoyancyCentreOffset = Vector3.zero;
public float bounceDamp = 1f;
public GameObject water;
public MegaDynamicRipple dynamicwater;
private Rigidbody rbody;
private void Start()
{
rbody = GetComponent<Rigidbody>();
if ((bool)water)
{
dynamicwater = water.GetComponent<MegaDynamicRipple>();
}
}
private void FixedUpdate()
{
if ((bool)dynamicwater)
{
waterLevel = dynamicwater.GetWaterHeight(water.transform.worldToLocalMatrix.MultiplyPoint(base.transform.position));
}
Vector3 position = base.transform.position + base.transform.TransformDirection(buoyancyCentreOffset);
float num = 1f - (position.y - waterLevel) / floatHeight;
if (num > 0f)
{
Vector3 force = -Physics.gravity * (num - rbody.velocity.y * bounceDamp);
rbody.AddForceAtPosition(force, position);
}
}
}