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(); if ((bool)water) { dynamicwater = water.GetComponent(); } } 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); } } }