unity 绳子模拟 Position Based Dynamics

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值