首先,我们将把Hooke定律写Euler方法结合在一起找到新坐标、加速和速度。
Hooke定律是F=kx,这里的F是指由水流产生的力(记住,我们将把水体表面模拟为水流),k是指水流的常量。x则是位移。我们的位移将成为每一个节点的y坐标减去节点的基本高度。
下一步,我们将加入一个与力的速度成比例的阻尼因素来削弱力unity3d 编写代码例如以下:
for (int i = 0; i < xpositions.Length ; i++)
{
float force = springconstant * (ypositions[i] – baseheight) + velocities[i]*damping ;
accelerations[i] = -force;
ypositions[i] += velocities[i];
velocities[i] += accelerations[i];
Body.SetPosition(i, new Vector3(xpositions[i], ypositions[i], z));
}
Euler方法非常easy,我们仅仅要向速度加入加速,向每帧坐标添加速度。
注:我仅仅是如果每一个节点的质量为1,但你可能会想用:
1
accelerations[i] = -force/mass;
如今我们将创造波传播。下面节点是依据Michael Hoffman的教程调整而来的:
1
2
float[] leftDeltas = new float[xpositions.Length];
float[] rightDeltas = new float[xpositions.Length];
在此。我们要创造两个阵列。针对每一个节点,我们将检查之前节点的高度,以及当前节点的高度,并将二者区别放入leftDeltas。
之后。我们将检查兴许节点的高度与当前检查节点的高度,并将二者的区别放入rightDeltas(我们将乘以一个传播常量来添加全部值)。

for (int j = 0; j < 8; j++)
{
for (int i = 0; i < xpositions.Length; i++)
{
if (i > 0)
{
leftDeltas[i] = spread * (ypositions[i] – ypositions[i-1]);
velocities[i - 1] += leftDeltas[i];
}
if (i < xpositions.Length – 1)
{
rightDeltas[i] = spread * (ypositions[i] – ypositions[i + 1]);
velocities[i + 1] += rightDeltas[i];
}
}
}

unity3d教程运行物理机制相关推荐

  1. 【Unity3D入门教程】物理引擎之碰撞解析

    Unity3D内置物理引擎,可以模拟物理效果.典型的一个物理效果就是碰撞.本文将会针对最简单的案例讲述Unity3D的碰撞规律. 1 碰撞规律 首先在场景中创建一个Sphere和一个Cube,它们都是 ...

  2. 【Unity3D 教程系列第 10 篇】Unity 脚本中的生命周期流程图

    这是[Unity3D 教程系列第 10 篇],如果觉得有用的话,欢迎关注专栏. 文章目录 一:生命周期流程图 二:常用的生命周期函数 三:脚本初始化和销毁 四:脚本的动态添加与静态添加 五:Awake ...

  3. Unity3D教程:动画融合、动画层、动画混合、附加动画、程序动画、动画重放和取样

    原帖地址:http://www.unitymanual.com/5323.html 动画脚本 Animation Scripting Unity's 动画系统允许你创建一个漂亮的动画蒙皮角色,动画系统 ...

  4. Unity3D教程:如何使用脚本进行控制

    首先,选择GameObject->Create Other->Cube创建一个立方体.我们将该场景另存为TankWar0.2做好版本控制.调整正方体和摄像机的位置,大致能在屏幕中看到摄像机 ...

  5. Unity3D教程宝典之Web服务器篇:(第二讲)从服务器下载图片

    转载自风宇冲Unity3D教程学院                                     从Web服务器下载图片 上一讲风宇冲介绍了wamp服务器及安装.这回介绍如何从服务器下载内容 ...

  6. Unity3D教程:简单触发器实现自动开关门

    首先确保你已经对门进行了动画的设置. 选择Window->Animation打开动画窗口,选中需要添加动画的门之后点击红色按钮创建新动画. 选中一个需要添加动画的要素之后(比如Postion.x ...

  7. unity3d用sever还是php,unity3d教程

    对unitye3d的学者来讲,学习Unity3D教程,必须经过Photon服务器入门,那么小编下面为大家分享讲解教程的内容. 首先去PhotonServer SDK下载服务器端SDK.解压出来是四个文 ...

  8. Unity3D教程:简单的碰撞检测

    需求:当立方体Cube碰到地面Plane的时候,输出碰撞物体的名称,则表述检测到立方体碰撞了地面. 1.搭建一个简单的场景. 在新的工程中选择File->new Scene创建新的场景.然后在该 ...

  9. 【Unity3D 教程系列第 15 篇】本地数据持久化之 Playerprefs 类

    这是[Unity3D 教程系列第 15 篇],如果觉得有用的话,欢迎关注专栏. 文章目录 一:什么是 PlayerPrefs 类 二:PlayerPrefs 类中的静态方法 1:写入数据 2:读取数据 ...

最新文章

  1. ATSS : 目标检测的自适应正负anchor选择,很扎实的trick | CVPR 2020
  2. [转载]hadoop集群默认配置和常用配置
  3. Xcode7 项目转 Xcode6 时 出现问题
  4. 数字图像处理实验(13):PROJECT 05-04,Parametric Wiener Filter
  5. ORACLE 临时表空间使用率过高的原因及临时解决方案
  6. What?你还搞不懂什么是物体检测?
  7. Excel文件读取的两种方式
  8. php双线切换线路,双线路策略路由和脚本备份切换
  9. 计算机视觉(CV)中HOG算法的主要步骤
  10. 腾讯区块链专利申请量排名全国第一;摩拜超20.56万单车被破坏;Nginx 1.17.7发布 | 极客头条...
  11. t检验自由度的意义_t检验的原理是什么?有什么意义?谢谢
  12. Hbase roekey设计入门
  13. 解决win10cmd乱码
  14. 太经典了,不转不行淘宝上面的对话
  15. 第6集丨Persistent Objects 和 Caché SQL
  16. 狗狗有关的知识tips
  17. 单片机中使用三极管驱动蜂鸣器
  18. 《实用python程序设计》练习题:向量点积计算
  19. Python(高级FTP作业)
  20. 计算机默认桌面位置,怎么更改电脑桌面存储位置?

热门文章

  1. win8 metro 拖拽重排grid
  2. 【CSON原创】HTML5游戏框架cnGameJS开发实录(外部输入模块篇)
  3. 启用IIS的Gzip压缩 【转】
  4. ptam tracking
  5. apache日志分析简介
  6. centOS怎样强制卸载PHP以及自定义安装PHP
  7. QQ验证码识别源代码(C#/NET1.1)
  8. 浅谈几种区块链网络攻击以及防御方案之其它网络攻击
  9. 【Qt】Qt容器总结
  10. 【Dlib】dlib和opencv的互转