用Unity实现简单的绳子模拟(一)

说到Unity物理,一般都会想到内置的physX物理引擎。其实我们也可以用Unity的API去实现一些简单的物理算法。
本文会介绍如何从头实现一个简单的绳子模拟的小Demo。

物理模型

物理模拟的第一步,就是要对真实世界的事物做简化,转化成可计算的模型。对于绳子,我们最直观的简化方法就是把它想象成一堆由弹簧连接的小球(一般也叫粒子)。这就是Mass-Spring模型。

用胡克定律我们就可以简单的求出弹簧力。
F = k * (L - L0)
其中k是弹簧系数,L是当前弹簧的长度,L0是弹簧不受力时的长度(初始长度)。

那么每个粒子的受力就很容易算出来了。

时间积分

有了粒子受到的外力之后,就需要开始考虑粒子如何跟着受力在时间的维度里运动了。
物理模拟的时间间隔通常是恒定的,我们这里就把时间间隔记为dt。
通常,只有初始时刻的参数是已知的,我们会根据初始时刻的参数(位置,速度,加速度)来推断下一时刻的位置。

图中的p代表粒子位置,v代表速度,a代表加速度,F代表受到的合力。
结合高中物理知识,上面的图应该比较容易理解。实际上,我们是在时间维度上做积分。这里我们简化地认为在dt足够小的时候,这段时间的运动可以认为是匀速运动。上图中的积分模式叫做Explicit Euler,这是一种误差大且不太稳定的时间积分方法,有空会仔细讨论不同的时间积分方法以及他们的误差分析。

实现

OK,现在就开始实现这样一个简单的绳子模拟器吧。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;namespace PhysicsLab
{public class RopeSpringSolver : MonoBehaviour{public Transform ParticlePrefab;public int SubStepCount = 10;public int Count = 3;public int Space = 1;public float SpringK = 1.0f;public float AirResistanceRatio = 0.1f;[Range(0, 1)]

用Unity实现简单的绳子模拟(一)相关推荐

  1. Unity简单的ease模拟

    Unity简单的ease模拟 using System.Collections; using System.Collections.Generic; using UnityEngine; //简单的e ...

  2. Unity中使用模板测试模拟Mask组件效果

    本文分享Unity中使用模板测试模拟Mask组件效果 在上一篇文章中, 我们分享了模板测试的基础知识, 在今天的分享中, 我们会尝试使用模板测试来模拟遮罩效果. Unity中使用模板测试模拟Mask组 ...

  3. python分子化学模拟_python简单实现gillespie模拟

    由于专业需求,需要做主方程的随机模拟.在网上并没有找到适合的Python实现,遂自己写了一个,分享一下源码.至于gillespie算法本身就不介绍了,有需要的读者自然会懂,没需要的读者不建议去懂. 源 ...

  4. python模拟行星运动_使用 Python 来简单的动态模拟一下太阳系的运转

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 以下文章来源于Python技术 ,作者派森酱 提到太阳系,大家可能会想到哥 ...

  5. [DirectX11]Gerstner波 实现简单的水面模拟

    上一篇文章中,介绍了一个简单数值方法来模拟圆形扩散波的效果,但是这种方法对于自然中像海浪一样的波 就无能为力了.所以,这篇文章介绍用Gerstner波来模拟水面波纹效果. 一.Gerstner波介绍 ...

  6. Unity 制作简单的任务动画

    Unity 制作简单的任务动画 1.添加人物模型到unity 我使用的是unity store中的免费模型: https://assetstore.unity.com/packages/3d/char ...

  7. 使用线程安全型双向链表实现简单 LRU Cache 模拟

    使用线程安全型双向链表实现简单 LRU Cache 模拟 目录

  8. unity实现简单fps游戏功能

    unity实现简单fps游戏鼠标功能 1.unity实现瞄准镜功能 实现原理 按下鼠标右键镜头拉近,再次按下镜头拉远(设置Camrea的FOV属性) 逐渐拉近(例如:60->20逐渐拉近) 设置 ...

  9. unity实现简单巡逻兵

    unity实现简单巡逻兵 游戏视频 游戏要求 创建一个地图和若干巡逻兵(使用动画): 每个巡逻兵走一个3~5个边的凸多边型,位置数据是相对地址.即每次确定下一个目标位置,用自己当前位置为原点计算: 巡 ...

最新文章

  1. 西安python工资怎么样-西安Python和人工智能的薪资前景到底怎么样?
  2. 第九届蓝桥杯java B组—第三题复数幂(详细介绍)
  3. {}是set类型还是dict类型呢
  4. 英语在线听力翻译器_仁爱版初一英语免费听力训练电子教程
  5. webservice 缓存机制
  6. 华为鸿蒙os再见了安卓,再见了安卓!华为鸿蒙OS 2.0正式登场,开机只需19秒
  7. Activity和Service交互
  8. 商务图表案例——仿经济学人分组漏斗图~
  9. jni 调用java类方法_AndroidJNI 通过C++调用JAVA
  10. 【四二学堂】基于uni-app开发的跨平台井字游戏(App+H5 web+微信小程序)
  11. Android 脚本设计之 SL4A
  12. 父亲节!程序员给父亲一份代码信
  13. 【微信小程序】使出千手浮图—回滚式
  14. 在idear中基于ssm框架做一个项目需要考虑的基本步骤
  15. JavaWeb自学笔记02
  16. C#中Dev配色修改
  17. 腾讯 美团 百度 网易游戏 2015校园招聘南京笔试面试之总结分析
  18. word自动消除html标签,如何将Word转换为网页html格式的方法(附代码清理方法)
  19. 十、生产者消费者问题
  20. 高频强调滤波增强图像

热门文章

  1. C. Completing the Square
  2. 如何写一个正经的Android音乐播放器 一
  3. bootstrapValidator验证 表单验证通过但无法提交form的原因
  4. camera capture
  5. codevs 1297
  6. 新版知乎登录之post请求
  7. 测试用例管理工具(testlinkexcel)
  8. 常见Linux命令整理
  9. 学习web前端的免费12个学习网站,等你来撩
  10. 北京炎黄盈动诚聘英才