Mesh网格撞击变形

物理碰撞

  • 两个游戏物体发生碰撞的必要条件:
  1. 发生碰撞的两个游戏物体有Collider(碰撞器)组件;
  2. 其中一个物体有Rigidbody(刚体)组件。
  • MonoBehaviour中的相关回调函数:
回调函数详解
OnCollisionEnter (Collision)当前碰撞器开始接触另一个碰撞器时被调用。
OnCollisionStay (Collision)当前碰撞器持续接触另一个碰撞器时被调用。
OnCollisionExit (Collision)当前碰撞器停止接触另一个碰撞器时被调用。

碰撞数据

物体发生碰撞时的碰撞数据存储于Collision对象中,相关属性:

  • articulationBody:与当前碰撞器发生碰撞的物体上的Articulation Body组件;
  • body:与当前碰撞器发生碰撞的物体上的Rigidbody或Articulation Body组件;
  • collider:与当前碰撞器发生碰撞的碰撞器;
  • contactCount:碰撞接触点的数量;
  • contacts:碰撞接触点数组,碰撞接触点包含位置和法线数据;
  • gameObject:与当前碰撞器发生碰撞的物体;
  • impulse:碰撞冲量;
  • relativeVelocity:两个碰撞对象的相对线性速度;
  • rigidbody:与当前碰撞器发生碰撞的物体上的Rigidbody组件;
  • transform:与当前碰撞器发生碰撞的物体的Transform组件。

撞击变形

  • 撞击判定:当relativeVelocity的长度大于一定阈值时,可以判定为撞击;
  • 网格变形:通过调整撞击物体上的网格顶点,使网格发生形变:
  1. 顶点位移量:计算网格顶点到碰撞接触点的距离,距离越近的变形程度应该越大,顶点位移量也就相应越大。
  2. 顶点位移方向:通过将relativeVelocity从世界空间转换到被撞击物体的局部空间获得顶点位移方向。
//变形发生的阈值
[SerializeField] private float deformationThreshold = 5f;
//变形影响的半径
[SerializeField] private float deformationRadius = .5f;

private void OnCollisionEnter(Collision collision)
{
    //两个碰撞对象的相对线性速度足够大时网格变形
    if (collision.relativeVelocity.magnitude > deformationThreshold)
    {
        //撞击的物体
        GameObject collideGameObject = collision.gameObject;
        //物体上的网格
        Mesh mesh = collideGameObject.GetComponent<MeshFilter>().sharedMesh;
        //网格上的顶点数组
        Vector3[] vertices = mesh.vertices;
        //遍历撞击接触点
        for (int i = 0; i < collision.contactCount; i++)
        {
            ContactPoint contactPoint = collision.GetContact(i);
            //全局坐标转撞击物体的局部坐标
            Vector3 world2LocalPoint = collideGameObject.transform.InverseTransformPoint(contactPoint.point);
            //遍历网格顶点 顶点移位形成变形
            for (int j = 0; j < vertices.Length; j++)
            {
                //网格顶点到撞击接触点的距离
                float magnitude = (world2LocalPoint - vertices[j]).magnitude;
                //在影响范围内
                if (magnitude < deformationRadius)
                {
                    //位移量
                    float delta = (deformationRadius - magnitude) / deformationRadius * .1f;
                    //位移
                    vertices[j] -= collideGameObject.transform
                        .InverseTransformDirection(collision.relativeVelocity) * delta;
                }
            }
        }
        //更新网格顶点
        mesh.vertices = vertices;
        mesh.RecalculateNormals();
        mesh.RecalculateBounds();
        //重启碰撞
        collision.collider.enabled = false;
        collision.collider.enabled = true;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

支持多医院使用的云HIS医院信息化管理系统源码 SaaS模式

一、什么是HIS系统 HIS系统&#xff08;Hospital InformationSystem&#xff09;是医院信息化建设的核心组成部分&#xff0c;它是为了管理和运营医院而设计和开发的一套综合性的信息系统。HIS系统通过整合医院各个部门和业务流程的数据和信息&#xff0c;实现了医院内部的信息…

GNN 图神经网络

GCN 邻接矩阵A&#xff1a;adjacency matrix用来表示节点间的连接关系。 度矩阵D&#xff1a;degree matrix用来表示节点的连接数 特征矩阵X&#xff1a;feature matrix用来表示节点的特征

鸿蒙4升级进展:共137款产品加入升级,Mate 20也能升级了

从华为官方发布的鸿蒙升级进展来看&#xff0c;2018年发布的Mate 20系列机型也开始了鸿蒙4系统升级的测试招募。 5年之期已到&#xff0c;再战5年不是梦想&#xff1f; 另外&#xff0c;从明年一季度的升级预告来看&#xff0c;春节前后升级的主要为穿戴手表产品。 目前&…

求求咯,一定要让幼师姐妹们都刷到啊啊啊啊

幼师姐妹还有不知道的吗???再也不用为了写东西而发愁烦恼了&#xff0c;就是这个写什么都可&#xff0c;各种总结&#xff0c;教案&#xff0c;评语&#xff0c;日报等等 都能写!尊嘟有用啊!!

淄博•关爱天使 质子治疗距普通患者又近一步!质子救助持续发热中

儿童肿瘤近年来有增多趋势&#xff0c;其原因可能有很多&#xff0c;与成人肿瘤一样&#xff0c;儿童肿瘤也分为良性和恶性。当孩子长了良性肿瘤时&#xff0c;开始一般不会有明显的症状&#xff0c;只有在肿瘤长到一定大小&#xff0c;开始挤压周围脏器&#xff0c;并影响这些…

SQL server 数据库练习题及答案(练习3)

一、编程题 公司部门表 department 字段名称 数据类型 约束等 字段描述 id int 主键&#xff0c;自增 部门ID name varchar(32) 非空&#xff0c;唯一 部门名称 description varchar(1024) …

暴力破解(Pikachu)

基于表单的暴力破解 先随便输入一下&#xff0c;然后抓包&#xff0c;进行字典爆破 验证码绕过(on server) server服务端要输入正确的验证码后进行爆破 之后的操作没什么不一样 验证码绕过(on client) 这个也需要输入验证码&#xff0c;但是后面进行字典爆破的时候&#xf…

EasyRecovery数据恢复软件好不好用?值不值得购买?

EasyRecovery是一款专业优秀的数据恢复软件&#xff0c;支持硬盘、光盘、U盘、手机、数码相机等设备&#xff0c;可以尽可能恢复被误删的文件数据&#xff08;视频、音频、图片等&#xff09;&#xff0c;欢迎下载。 EasyRecovery-2024mac最新版本下载: https://wm.makeding.c…

Matlab论文插图绘制模板第132期—函数等高线填充图

在之前的文章中&#xff0c;分享了Matlab函数折线图的绘制模板&#xff1a; 函数三维折线图&#xff1a; 函数网格曲面图&#xff1a; 函数曲面图&#xff1a; 函数等高线图&#xff1a; 进一步&#xff0c;再来分享一下函数等高线填充图。 先来看一下成品效果&#xff1a; 特…

CleanMyMac X2024免费许可证及功能详细讲解

一些用户反映自己的CleanMyMac卸载不干净&#xff1f;你的卸载方式正确码&#xff1f;当你在Mac上安装使用CleanMyMac后&#xff0c;需要将软件卸载&#xff0c;你会使用怎样方法完成操作呢&#xff1f;小编今天主要讲解如何卸载CleanMyMac以及卸载这款软件时应该注意的事项。一…

JS 正则表达式(正则匹配RegExp)

JavaScript实现对象深拷贝的方法&#xff08;5种&#xff09; 知识回调&#xff08;不懂就看这儿&#xff01;&#xff09;场景复现核心干货举例引入关于RegExp对象语法修饰符——区分大小写和全局匹配方括号——查找某个范围内的字符元字符——拥有特殊含义的字符量词RegExp对…

Vue项目中使用fontawesome图标库

官方文档https://fontawesome.com.cn/ Font Awesome 1. 使用npm安装核心包&#xff0c;它包含了让图标工作的所有实用工具 npm i --save fortawesome/fontawesome-svg-core2. 安装vue-fontawesome组件库&#xff0c;Vue2.x和Vue3.x稍微有所不同 # Vue2.x npm i --save fort…

2023新能源汽车,吵得越凶,卖得越多

作者 | 辰纹 来源 | 洞见新研社 2023年的汽车行业很残酷&#xff0c;合资大败退&#xff0c;市场份额被自主品牌大幅渗透&#xff0c;三菱退出中国市场&#xff0c;成为真实写照。 新能源车企&#xff0c;威马领头&#xff0c;天际、自游家NIUTRON、恒驰、爱驰、雷丁等造车新…

非对称加密与对称加密的区别是什么?

在数据通信中&#xff0c;加密技术是防止数据被未授权的人访问的关键措施之一。而对称加密和非对称加密是两种最常见的加密技术&#xff0c;它们被广泛应用于数据安全领域&#xff0c;并且可以组合起来以达到更好的加密效果。本文将探讨这两种技术的区别&#xff0c;以及它们在…

【开源】基于Vue+SpringBoot的图书管理系统

目录 一、 系统介绍二、 功能模块2.1 登录注册模块2.1 图书馆模块2.2 图书类型模块2.3 图书模块2.4 图书借阅模块2.5 公告模块 三、 源码解析3.1 图书馆模块设计3.2 图书类型模块设计3.3 图书模块设计3.4 图书借阅模块设计3.5 公告模块设计 四、 免责说明 一、 系统介绍 图书管…

nginx: [error] open() “/var/run/nginx/nginx.pid“ failed (2: No such file or directory)

该错误消息通常表示 Nginx 在启动过程中无法找到指定路径的日志文件或进程号文件。 我这边是因为服务器断电&#xff0c;导致该问题 这个问题可能有几种原因和解决方法&#xff1a; 1. 确保 Nginx 配置文件中的日志路径正确。在 Nginx 配置文件中查找 error_log 和 pid 配置指…

STL:std::array 和 基本数组类型array 浅谈一二三

一、优缺点比较 在C中&#xff0c;std::array是标准库提供的数组容器&#xff0c;相比于基础数据类型的数组&#xff0c;它具有以下优点和缺点&#xff1a; 优点&#xff1a; 安全性&#xff1a;std::array提供了边界检查&#xff0c;可以避免数组越界访问的问题。 可以作为…

Gin入门指南:从零开始快速掌握Go Web框架Gin

官网:https://gin-gonic.com/ GitHub:https://github.com/gin-gonic 了解 Gin Gin 是一个使用 Go 语言开发的 Web 框架,它非常轻量级且具有高性能。Gin 提供了快速构建 Web 应用程序所需的基本功能和丰富的中间件支持。 以下是 Gin 框架的一些特点和功能: 快速而高效:…

MySQL explain执行计划详解

使用explain关键字可以模拟优化器执行SQL查询语句&#xff0c;从而知道MySQL是如何处理你的SQL语句的&#xff0c;分析你的查询语句或是表结构的性能瓶颈。 explain执行计划包含的信息 其中最重要的字段为&#xff1a;id、type、key、rows、Extra 各字段详解 id select查询…

2024年运动耳机推荐,十大运动蓝牙耳机品牌排行榜

​运动耳机对于运动爱好者来说&#xff0c;是一种提升运动体验的必备装备。它们不仅需要具备优秀的音质&#xff0c;还需要在运动中提供稳定的佩戴体验和防汗功能。市面上的运动耳机琳琅满目&#xff0c;挑选起来可能会有些困难。因此&#xff0c;今天我为大家带来几款在运动中…
最新文章