公式

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 船的控制

Unity 水体浮力的实现相关推荐

  1. Unity 水体效果模拟

    内容为学习siki学院课程后做的笔记,感兴趣可以查看原课程. 制作水滴 水体是由一个个水滴构成的,所以先实现一个水滴. 2D Object -> Sprites ->Circle创建一个2 ...

  2. Unity 船的控制

    原理 按下WS键时,给船一个前后方向上的推力 按下AD键时,给船一个围绕Y轴旋转的扭矩 扭矩 Torque 扭矩力,是使物体发生转动的力. 玩家控制 如果进入驾驶状态,则禁用玩家控制脚本,并使用父子约 ...

  3. [Unity/URP学习]风格化水体渲染(一)

    风格化水体的实现内容 文章目录 风格化水体的实现内容 风格化水体实现过程 1.水体颜色 1.1风格化水体颜色渐变 1.2水体深浅区域 1.2.1开启深度纹理 1.2.2深度纹理采样 1.3水体透明度 ...

  4. Unity 3D液体浮力实现

    前言 本文以unity的StandardAssets中的water资源为基础,实现物体在水中的漂浮效果.     概述 1.    建立场景并添加水详见https://docs.unity3d.com ...

  5. Unity Shader - 水体交互

    水体交互 水体交互效果在游戏中是一个很常见的需求,这里简单实现一个可交互的水体. 本篇文章主要是介绍水体交互的实现思路,水体的渲染这里就不再详细介绍,网上很多关于水体的渲染方法很多,可以自己百度.Go ...

  6. Unity Shader - 实现简单水体 - 浅水到深水颜色控制

    文章目录 制作步骤 准备好水体网格 扰动水体网格 添加水体网格色调,纹理 放置海上放哨点(一些随便放的立方体) 添加水的深浅透视效果 添加水光效 重构水顶点法线 正交的相机的深度需要注意 改进 Pro ...

  7. 【转】如何使用Unity创造动态的2D水体效果

    原文:http://gamerboom.com/archives/83080 作者:Alex Rose 在本篇教程中,我们将使用简单的物理机制模拟一个动态的2D水体.我们将使用一个线性渲染器.网格渲染 ...

  8. 使用Unity创造动态的2D水体效果

    者:Alex Rose 在本篇教程中,我们将使用简单的物理机制模拟一个动态的2D水体.我们将使用一个线性渲染器.网格渲染器,触发器以及粒子的混合体来创造这一水体效果,最终得到可运用于你下款游戏的水纹和 ...

  9. 【Unity Shader实例】 水体WaterEffect(二) 用贴图和uv动画模拟水效

    Unity Shader实现简单水体效果 效果展示 原理 用贴图和uv动画模拟水效实现"假"水. 设计 找一张水波的贴图,处理它的uv值,让贴图流动起来.这样就用静态纹理和uv动画 ...

最新文章

  1. 移动方向_1908号台风“范斯高”继续向西北方向移动
  2. 支持字母数字下划线和中文的正则
  3. HOT!闲来无聊,总结了下10个作为网民不得不知道的网址
  4. php csv转excel 双引号,PHP高效导出Excel(CSV)
  5. QT开发(四十)——GraphicsView编程
  6. centos 安装 Pip 的方法总结
  7. php中的全局变量$GLOBALS与global的区别
  8. win10桌面便签小工具下载,可固定电脑桌面的便签软件
  9. cisco 2811路由器详细配置
  10. 高效记忆/形象记忆(07)110数字编码表 11-20
  11. python 广告联盟_利用京东联盟API获取自定义推广链接
  12. 南京java程序员工资_2019年一二线城市java程序员工资大调查
  13. 信息学奥赛一本通T1436-数列分段II (二分)
  14. Android 各版本gradle下载地址
  15. 用计算机处理表格说课稿,《制作表格》说课稿
  16. C/C++函数注释格式
  17. 双向可控硅触发电路的设计方案
  18. kmeans聚类目的干什么的_零基础学习Kmeans聚类算法的原理与实现过程
  19. 龙OL外网架设成功案例
  20. vue+element 实现试卷答题功能,单选题 ,多选题,判断题,简答题(2.0版本,2021.3.25更新)

热门文章

  1. PAT基础级-黄金段位样卷1
  2. c语言程序 5ms 延时,计算机单片机延时方法电脑c语言.docx
  3. Unity实现动态修改模型材质球
  4. 330pics-shell scripts-second
  5. android系统system镜像解包打包制作过程
  6. 练习---打印出电影天堂中电影的下载链接
  7. excel中联系人转换为csv导入手机出现乱码的解决方法
  8. mysql的安装使用(免安装版)
  9. CCF ChinaSoft 2022预告丨形式化方法工业应用前沿分论坛 暨中科国创高可信联合上海控安新品发布...
  10. marvin java_Java开源图像处理框架Marvin介绍