0
点赞
收藏
分享

微信扫一扫

Unity 水体浮力的实现

mafa1993 2022-03-13 阅读 51
unity

F浮 = ρ液gV排

创建一个平面,为了让它透明,将其翻转180度,使其正面朝下

再将其默认的Mesh Collider移除,替换成Box Collider,并将其设置为触发器

将其包围盒的高度至足够大,然后将平面的大小调整到与海平面一致

最后给平面添加脚本,配置相关参数:

ρ 液体密度

G 重力加速度

Sea Level 海平面高度

如果物体要受到浮力作用,则需要给它添加碰撞体和刚体。

物体的质量不能设置得太大,因为它的密度(ρ = m / V )要比水小才能浮起来。

using UnityEngine;

public class Buoyancy : MonoBehaviour
{
    public float ρ = 1;
    public float g = 9.81f;
    public float SeaLevel = 3;

    private void OnTriggerStay(Collider collision)
    {
        if (collision != null)
        {
            collision.attachedRigidbody.velocity =
                new Vector3(collision.attachedRigidbody.velocity.x,
                            Mathf.Lerp(collision.attachedRigidbody.velocity.y,0,0.01f),
                            collision.attachedRigidbody.velocity.z);

            float Depth = SeaLevel - collision.transform.position.y + collision.bounds.extents.y;
            float LengthBesideWater = Mathf.Clamp(Depth,0,collision.bounds.size.y);
            float V = collision.bounds.size.x * LengthBesideWater * collision.bounds.size.z;
            collision.attachedRigidbody.AddForce(new Vector3(0, ρ * g * V, 0),ForceMode.Force);       
        }
    }
}
举报

相关推荐

0 条评论