unity 绳子模拟
Position Based Dynamics
PBD采用几何的方式,通过先建立约束再对约束进行投影的方式来直接计算出位置和速度。这里的约束投影可以理解为通过数学公式计算出物体下一个时间步的位置,使之满足给定的约束条件。(如下图的例子[2]) 这里和PCISPH方法一样也是采用了预测-校正的思路。
尽管PBD方法不如基于力的方法精度高,但是PBD方法具有模拟稳定,允许大时间步长以及高度可控性等优点,非常适合用于游戏物理引擎中模拟各种物理特效。
以上原理引用知乎 原理
其中引用的工具
https://gitee.com/HughJk/ToolMode
Y点原点
C当前位置
N下一帧的位置
R计算出来的合理位置
V当前的速度
Rv新的速度
/******************************************************************************
* 【本类功能概述】 *
* 版权所有(C)2017-20XX *
* 保留所有权利。 *
******************************************************************************
* 作者 : <hugh__k@163.com>
* 创建时间: 2020年4月14日 18:15:07
* 文件描述:绳子~
*****************************************************************************/
using UnityEngine;
using System.Collections;
using Util;
using System.Collections.Generic;
public class rope : MonoBehaviour {
public List<Rigidbody2D> Nodelist;
public List<HingeJoint2D> NodelistHj;
public Transform node;//节点
public int num = 3;//节点数量
public float NodeDis = 1;//间距
public LineRenderer line;
[Button("init")]
public void Init() {
Nodelist = new List<Rigidbody2D>();
NodelistHj = new List<HingeJoint2D>();
for (int i = 0; i < num; i++) {
Transform n = transform.Find(i.toString());
if (!n) {
n = GameObject.Instantiate(node);
n.name = i.toString();
n.parent = transform;
n.gameObject.setActive(true);
}
n.localPosition = Vector3.left * i * NodeDis;
var rig = n.GetCompone