Unity 水体浮力的实现

公式

F浮 = ρ液gV排

(浮力单位为N,液体密度单位为kg / m³,重力加速度单位为m / s²,体积单位为m³)

实现方法

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

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

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

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

ρ 液体密度 (kg / m³)

G 重力加速度 (m / s²)

Sea Level 海平面高度

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

在播放模式下,不断地调整物体的质量,寻找一个合适的数值,使其能够平静地浮于水面。

比如将游戏角色Riko,身高158cm,将其体重设置为38.5kg时,恰好能在水中悬浮。

可以适当调整角阻力 Angular Drag,避免物体在水中一直旋转,也可以直接冻结刚体的旋转。

此外,该脚本直接限制了物体各轴的速度,如无外力,在一定时间内将停止运动。

效果

代码

using UnityEngine;

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

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

            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);       
            //print(collision.name+" 深度:"+ Depth + " 水下部分高度:" + LengthBesideWater + " 水下部分体积:" + V + " 浮力:" + ρ * g * V);
        }
    }
}

Unity 船的控制

  • 8
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity是一款强大的游戏开发引擎,它在物理模拟和图形渲染方面具有出色的表现。在Unity中,我们可以通过使用材质、纹理和粒子系统等功能来实现动态水体涟漪效果。 首先,我们需要创建一个水面模型,可以使用Unity内置的平面网格,或者导入自定义的水体模型。然后,我们可以为水面添加一个适用于涟漪效果的材质。这个材质应该包括透明度、反射和折射等属性,以实现真实的水体效果。 为了实现动态涟漪效果,我们可以使用Unity的粒子系统。在水体表面的特定位置,通过发射水滴粒子,我们可以模拟水面上的涟漪效果。这些粒子应该具有适当的速度和角度,以便能够溅起涟漪效果。 此外,我们还可以利用Unity的碰撞检测功能,使得水滴粒子与水体表面发生碰撞时产生涟漪效果。当水滴粒子与水面碰撞时,我们可以通过修改水面的顶点位置,以及更新法线和切线来实现漂移和波纹的效果。这样,当水滴在水面上溅起时,周围的水面将产生波动,并形成涟漪效果。 为了增强涟漪效果的真实感,我们可以通过调整涟漪的扩散范围、持续时间和淡化效果来控制涟漪的外观。另外,还可以使用图形着色器和纹理贴图来增加水体的细节和真实感。 总之,在Unity实现动态水体涟漪效果,我们可以使用材质、粒子系统、碰撞检测和纹理贴图等功能来模拟真实的涟漪效果。这些功能可以帮助我们创造出逼真的水体效果,提升游戏或仿真场景的视觉体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值