首先,我们将把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教程宝典之Blur

    原创文章如需转载请注明:转载自风宇冲Unity3D教程学院                   BlurBlur模糊其实理解了以后非常简单.核心原理就是 1个点的颜色 并不用该点的颜色,而是用该点周围 ...

  2. Unity3D教程宝典之Web服务器篇:(第三讲)PHP的Hello World

    转载自风宇冲Unity3D教程学院 引言:PHP是比较简单的编程语言,即使没接触过的也可以现学现用.PHP教程文档PHP100视频教程                           Unity接 ...

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

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

  4. Unity3D教程:无缝地形场景切换的解决方法

    http://www.unitymanual.com/6718.html 当我们开发一个大型项目的时候-会遇到这样的问题(地形场景的切换)这个只是字面意思-并不是重场景1的100  100 100坐标 ...

  5. Pytest权威教程24-Pytest导入机制及系统路径

    目录 Pytest导入机制和sys.path/PYTHONPATH 包中的测试脚本及conftest.py文件 独立测试模块及conftest.py文件 调用通过python -m pytest调用p ...

  6. iOS开发之runtime运行时机制

    最近参加三次面试都有被问到runtime,因为不太懂runtime我就只能支支吾吾的说点零碎.我真的好几次努力想看一看runtime的知识,因为知道理解它对理解OC代码内部变化有一定帮助,不过真心觉得 ...

  7. runtime 运行时机制 完全解读

    runtime 运行时机制 完全解读   目录[-] import import 我们前面已经讲过一篇runtime 原理,现在这篇文章主要介绍的是runtime是什么以及怎么用!希望对读者有所帮助! ...

  8. [Spark内核] 第35课:打通 Spark 系统运行内幕机制循环流程

    本课主题 打通 Spark 系统运行内幕机制循环流程 引言 通过 DAGScheduelr 面向整个 Job,然后划分成不同的 Stage,Stage 是從后往前划分的,执行的时候是從前往后执行的,每 ...

  9. (转)【风宇冲】Unity3D教程宝典之AssetBundles:第二讲

    原创文章如需转载请注明:转载自风宇冲Unity3D教程学院                             AssetBundles第二讲:AssetBundles与脚本 所有Unity的As ...

随机推荐

  1. python 数据的基本类型(字符串)

    python 基础 ascii:字母,数字,特殊字符:1个字节(byte) 8个字位(bit)unicode: 16位两个字节,升级32个字节 4个字位utf-8:最少一个字节 8个表示. 英文 8字 ...

  2. PIE加载自定义服务数据详细介绍

    这段时间我一直在研究如何用PIE加载在线地图服务,遇到了许多问题,多亏了技术员小姐姐的帮助,才让我能正确加载ArcGIS Online在线服务.天地图在线地图和谷歌在线地图.我是根据博客园PIE官方博 ...

  3. webpack-1

    1.webpack 安装新项目npm install --save-dev webpack如果版本较老,在package,json中找到版本号,修改成你要的版本号,在删除node-model文件夹,执 ...

  4. Java基础7一面向对象

    1.构造方法: (1)定义:方法名称必须和类名相同,没有返回值,也没有void (2)语法: [访问修饰符] 类名(){ } (3)作用:创建对象.初始化成员变量. (4)构造方法的分类: A.无参数 ...

  5. Android 从imageview中获得bitmap的方法

    第一种: 使用setDrawingCacheEnabled()和getDrawingCache()这两种方法,第一个是为了设置是否开启缓存,第二个就可以直接获得imageview中的缓存,一般来说需要 ...

  6. 最影响APP软件质量和成本的三个方面。希望大家一定要记在心里!

    1.功能的开发方式 现在市场上存在的几种开发方式如下: a.web网页加壳生成APP web网页加壳生成APP的开发方式,先花几百块钱买个现成的手机网站模板,在加壳打包一个APP只需要5分钟,但是做出 ...

  7. jquery mobile在移动设备上显示太大问题

    head里边加入这个会让客户端元素很大...宽度都是device-width,不过比较大! <meta name="viewport" content="width ...

  8. In-Out Parameters inout keyword

    You write an in-out parameter by placing the inout keyword right before a parameter’s type. An in-ou ...

  9. js 正则 测试

    var str0 = '2013-6-7()'; var AAAAADD = str0.match(/(\d)/g); //11个空字符串 //["2", "0" ...

  10. 用shell编写一个三角形图案

    第一种方法 #!/bin/bash read -p "请输入层数: " n for (( i=1; i<=$n;i++ ))do   for (( j=n; j>=i; ...