zoukankan      html  css  js  c++  java
  • unity3d教程运行物理机制

    首先,我们将把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];
    }
    }
    }
  • 相关阅读:
    装饰器模式(学习笔记10)
    软件设计七大原则 (学习笔记2)
    设计模式(学习笔记1)
    桥接模式 (学习笔记9)
    Mini2440裸机开发之LCD基础
    配置中心java客户端实现
    高效CSS写法
    整理电脑里面的前端开发中的小Tips【及时更新】
    IE6 position:fixed (固定定位)的解决方案
    jquery 文档操作
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/6978438.html
Copyright © 2011-2022 走看看