使用Unity脚本模拟绳索、布料(碰撞)

效果演示:

脚本如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;namespace PhysicsLab
{public class RopeSolver : MonoBehaviour {public Transform ParticlePrefab;public int Count = 3;public int Space = 1;[Range(0, 1)]public float Damping = 0.1f;public Vector3 ExternForce = Vector3.zero;public int SolveCount = 1;[Header("Collider")]public RopeSphereCollider sphereCollider;private List<Transform> chain = new List<Transform>();private List<Particle> particleList = new List<Particle>();void Start(){for (int i=0; i<Count; i++){var obj = Instantiate(ParticlePrefab, transform, true);obj.Translate(0, -i * Space, 0);chain.Add(obj);// Construct Particlesvar particle = new Particle();particle.radius = 0.5f * Space;particle.pos = particle.prevPos = new Vector3(0, -i * Space, 0);particle.velocity = Vector3.zero;particleList.Add(particle);}}void FixedUpdate (){// Update Velocityfor (int i=0; i<Count; i++){var particle = particleList[i];// Verlet IntegrationVector3 vel = particle.velocity + ExternForce * Time.fixedDeltaTime * Time.fixedDeltaTime;particle.prevPos = particle.pos;particle.pos = particle.pos + (1-Damping) * vel;}// Resolve Constraints// 1. Attach Root Particle to base transformparticleList[0].pos = transform.position;// 2. Keep Length Constraint from top to bottomfor (int n=0; n<SolveCount; n++){for (int i=1; i<Count; i++){Vector3 offsetToParent = particleList[i].pos - particleList[i-1].pos;// Strategy 1: only move child particle//particleList[i].pos = particleList[i-1].pos + Space * offsetToParent.normalized;// Strategy 2: Position Based Dynamics, iterativelyoffsetToParent = Space * offsetToParent.normalized - offsetToParent;particleList[i-1].pos -= 0.5f * offsetToParent;particleList[i].pos += 0.5f * offsetToParent;}// Attach Root Particle to base transformparticleList[0].pos = transform.position;}// Collision Detection & Responseif (sphereCollider != null){for (int i=0; i<Count; i++){sphereCollider.UpdateCollision(particleList[i]);}}// Update velocityfor (int i=0; i<Count; i++){particleList[i].velocity = particleList[i].pos - particleList[i].prevPos;}// Apply Particle Data to Transformfor (int i=0; i<Count; i++){chain[i].position = particleList[i].pos;}}}public class Particle{public float radius;public Vector3 pos;public Vector3 prevPos;public Vector3 velocity;}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;namespace PhysicsLab
{[RequireComponent(typeof(Transform))]public class RopeSphereCollider : MonoBehaviour {private Transform sphereTfm;void OnEnable(){sphereTfm = GetComponent<Transform>();}public void UpdateCollision(Particle particle){Vector3 colliderCenter = sphereTfm.position;float colliderR = sphereTfm.lossyScale.x * 0.5f;Vector3 offset = particle.pos - colliderCenter;if (offset.magnitude < colliderR + particle.radius) // Collision Detected{// Collision Responseparticle.pos = colliderCenter + offset.normalized * (colliderR + particle.radius);}}}
}

源码下载链接: https://download.csdn.net/download/qq_41603955/90086948

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/63131.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

项目开发之Docker

文章目录 基础核心概念常用命令 实操1 windows11 docker mysql2 docker部署 xxljob3 container间调用异常问题4 部署mysql数据库5 docker desktop unexpected wsl error 基础 核心概念 其中的三个核心概念&#xff1a;dockerfile image/镜像 container/容器 image&#xff1a…

在Java中使用Apache POI导入导出Excel(六)

本文将继续介绍POI的使用&#xff0c;上接在Java中使用Apache POI导入导出Excel&#xff08;五&#xff09; 使用Apache POI组件操作Excel&#xff08;六&#xff09; 43、隐藏和取消隐藏行 使用 Excel&#xff0c;可以通过选择该行&#xff08;或行&#xff09;来隐藏工作表…

Ruby On Rails 笔记1——Rails 入门

突然想跟着官方文档把Ruby On Rails过一遍&#xff0c;把一些有用的记下来就可以一直看了&#xff0c;do它! https://guides.rubyonrails.org/v7.2/ 注&#xff1a;官网是英文文档&#xff0c;我自己翻译了一下&#xff0c;不确保完全准确&#xff0c;只供自己学习开发使用。 …

基于Matlab BP神经网络的电力负荷预测模型研究与实现

随着电力系统的复杂性和规模的不断增长&#xff0c;准确的电力负荷预测对于电网的稳定性和运行效率至关重要。传统的负荷预测方法依赖于历史数据和简单的统计模型&#xff0c;但这些方法在处理非线性和动态变化的负荷数据时&#xff0c;表现出较大的局限性。近年来&#xff0c;…

MperReduce学习笔记下

自定义InputFormat合并小文件 案例需求 无论hdfs还是mapreduce&#xff0c;对于小文件都有损效率&#xff0c;实践中&#xff0c;又难免面临处理大量小文件的场景&#xff0c;此时&#xff0c;就需要有相应解决方案。 案例分析 小文件的优化无非以下几种方式&#xff1a; …

中国汽车出海风口下,智能网联供应商如何掘金海外市场?

中国智能网联供应链出海掘金潮已至。 中国汽车工业协会最新发布的数据显示&#xff0c;2024年1-8月乘用车累计出口317.5万辆&#xff0c;同比增长29.4%。2023年中国汽车出口量近500万台&#xff0c;出口的销量对中国汽车总销量增长的贡献率达到55.7%。 根据各大车企披露的规划…

react + antd desgin 使用form功能时upload,radio,checkbox不能回显的问题

最近使用react开发 遇到form回显的问题 &#xff0c;处理upload回显的问题&#xff0c;提示 react-refresh:160 Warning: [antd: Upload] value is not a valid prop, do you mean fileList? 查看文档后&#xff0c;在form.item 组件下有一个特殊属性 valuePropName 子节点的值…

Visual Studio开发lua脚本环境搭建

在Visual Studio上开发lua脚本环境搭建 1、下载lua的jdk安装&#xff0c;以及环境变量配置 下载LuaForWindows_v5.1.5-52.exe安装&#xff0c; 安装好之后&#xff0c;检查是否路径自动。 下载地址&#xff1a; https://github.com/rjpcomputing/luaforwindows/releases (1…

Elasticsearch ILM 故障排除:常见问题及修复

作者&#xff1a;来自 Elastic Stef Nestor 大家好&#xff01;我们的 Elasticsearch 团队正在不断改进我们的索引生命周期管理 (index Lifecycle Management - ILM) 功能。当我第一次加入 Elastic Support 时&#xff0c;我通过我们的使用 ILM 实现自动滚动教程快速上手。在帮…

初步简单的理解什么是库,什么是静态库,什么是动态库

库是什么 库根据名字我们应该很容易理解&#xff0c;在我们日常生活种&#xff0c;包含库的东西有很多&#xff0c;像仓库&#xff0c;库房那些&#xff0c;库是拿来存放&#xff0c;方便管理东西的&#xff0c;在我们编程当中&#xff0c;库的定义也是如此 那么为什么要有库…

建筑行业数据分析如何做?

导读&#xff1a;在谈数字化转型之前&#xff0c;先来谈谈数据的价值。数字化转型的基础是数据&#xff0c;是数字化的基本的生产资料&#xff0c;数据的质量直接决定了数字化的能力、所能达到的深度和广度。目前做的数据可视化项目总感觉只是数据展现而已&#xff0c;而不达不…

服务器监控工具哪吒探针 v1 版本上线 全新设计带来新体验

本文首发于只抄博客&#xff0c;欢迎点击原文链接了解更多内容。 前言 上周黑五期间&#xff0c;哪吒探针进行了一次颇有争议的 Breaking Change 更新&#xff0c;将面板和 Agent 升级到了 v1 版本&#xff0c;并且与原来的 v0.x 版本完全不兼容。 同时&#xff0c;将 v0.x 的…

QNX的资源管理器:resmgr

参考资料: QNX官网文档 openqnx源码参考 这篇文章借用一下openqnx中的trunk/services/dumper/dumper.c作为参考 以下代码参考openqnx,现在的QNX许多机制或许有大致改进和调整,但是基本上不会跳出这个框架 在Linux中,一切设备皆文件,在/dev目录下,一个文件标识一个或多…

Node.js 中的文件系统(fs)模块详解与代码示例

Node.js 中的文件系统&#xff08;fs&#xff09;模块详解与代码示例 Node.js 的 fs 模块提供了与文件系统交互的能力&#xff0c;包括文件的读写、目录的管理等。以下是 fs 模块中一些常用方法的详细解释和代码示例&#xff1a; 1. 异步读取文件内容 作用&#xff1a;异步读…

LabVIEW密码保护与反编译的安全性分析

在LabVIEW中&#xff0c;密码保护是一种常见的源代码保护手段&#xff0c;但其安全性并不高&#xff0c;尤其是在面对专业反编译工具时。理论上&#xff0c;所有软件的反编译都是可能的&#xff0c;尽管反编译不一定恢复完全的源代码&#xff0c;但足以提取程序的核心功能和算法…

灰狼算法与蚁群算法的结合:一种新颖的优化方法

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

【前端学习路线】(超详细版本)

先附上学习路线图&#xff1a;前端学习路线 第一阶段&#xff1a;前端入门&#xff08;htmlcss&#xff09; 前端最基本的知识&#xff0c;需要先将这些内容融汇贯通&#xff0c;学习后面内容才会不吃力。学习完可以做几个静态页练习一下。 推荐视频学习链接&#xff1a; 黑马程…

四、自然语言处理_03LSTM与GRU

0、前言 随着循环神经网络&#xff08;RNN&#xff09;在各种序列数据处理任务中被广泛应用&#xff0c;研究人员逐渐发现了其在处理长序列数据时会容易出现梯度消失&#xff08;vanishing gradient&#xff09;和梯度爆炸&#xff08;exploding gradient&#xff09;问题&…

类加载过程Java虚拟机(JVM)详细

类加载过程是Java虚拟机&#xff08;JVM&#xff09;将类的字节码文件加载到内存中&#xff0c;并生成对应的类对象的过程。这个过程主要包括加载、验证、准备、解析和初始化五个阶段&#xff0c;每个阶段都有其特定的任务和作用。以下是对每个阶段的详细解释&#xff1a; 1. …

基于灰色神经网络的订单需求预测

灰色神经网络&#xff08;Grey Neural Network, GNN&#xff09; 是将灰色系统理论与人工神经网络相结合的一种模型&#xff0c;旨在处理不完全信息和小样本问题。灰色神经网络利用灰色系统的预测优势和神经网络的学习能力&#xff0c;能够在信息不完整或数据不充分的情况下实现…