43 lines
949 B
C#
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);
|
|
}
|
|
}
|
|
}
|