第二十六章 Unity碰撞体Collision(上)
在游戏世界中,游戏物体之间的交互都是通过“碰撞接触”来进行交互的。例如,攻击怪物则是主角与怪物的碰撞,触发机关则是主角与机关的碰撞。在DirectX课程中,我们也大致介绍过有关碰撞检测的内容。游戏世界中的3D模型的形状是非常复杂的,我们不可能按照模型的原始形状进行两者之间的碰撞检测,而是将模型看做近似的立方体或者球体来进行碰撞检测,虽然这种形式的检测精度不是很高,但是对于一般的游戏体验来讲,已经足够了。
在Unity中碰撞体分为:盒型碰撞体、球形碰撞体和胶囊碰撞体,还有一个网格碰撞体。当然,我们还可以将任意数量的上述碰撞体添加到单个游戏对象以创建复合碰撞体。复合碰撞体可以更加贴近的模拟游戏对象的形状,同时保持较低的性能开销。复合碰撞体一般用于父子化的游戏对象,并且根游戏对象上应该只使用一个刚体组件。在某些情况下,如果复合碰撞体也不够准确。我们才可以使用网格碰撞体精确匹配游戏对象网格的形状。网格碰撞体需要更高的性能开销,因此请尽量不要在游戏中大量使用。此外,网格碰撞体之间无法进行碰撞检测,只能是简单的盒型或球形碰撞体与网格碰撞体进行碰撞检测。
接下来,我们创建一个新的场景“SampleScene2.unity”来演示碰撞体的使用。
我们在一个平面上面添加两个球体,默认情况下,创建的球体会自动添加球形碰撞体。
如上图所示中的“Sphere Collider”球形碰撞组件,为了能够让我们左边的黄色球体Sphere2产生运动,我们需要添加一个刚体,如下所示:
此时,我们的黄色球体Sphere2同时具备了碰撞体和刚体两个组件。接下来,我们给黄色球体施加一个力,让其能够向右运动去撞击紫色的球体Sphere1。
我们增加了一个X轴方向的数值为2的力。接下来,我们就运行这个工程来查看效果:
我们发现,当黄色球体接触到紫色球体的时候,就静止不动了。我们暂时不解释这个结果。我们上面提到过,球体是自动添加球形碰撞体的,也就是说,我们的紫色球体上面有一个球形碰撞体(没有刚体)。我们取消紫色球体上面的球形碰撞体,在重新运行这个工程。
我们发现,黄色球体会穿过紫色球体继续向右运动下去。从紫色球体的表现,我们可以看出碰撞体组件最明显的表现就是不会让对方游戏对象穿透(也叫穿模)。接下来,我们将黄色球体的碰撞体组件也取消掉(同时取消刚体Use Gravity属性,防止重力影响掉落平面以下),也就是说两个球体都没有碰撞体组件了。如果我们再次运行工程的话,就会发现黄球依然穿透紫球。那么,我们恢复紫球的碰撞体组件呢?我们再次运行工程,就会发现黄色再次穿透紫球了。最后的结论就是,两者都具备碰撞体组件的时候,才会发生碰撞检测。这个道理非常简单,熟悉我们DirectX课程的应该知道,碰撞检测的本质就是两个碰撞模型进行相互包含计算,因此碰撞双方都必须具备碰撞体,否则没办法进行检测计算。
接下来,我们就来介绍一些碰撞体组件的参数。
首先是Edit Collider按钮,点击这个按钮,可以让我们可视化的调整碰撞体的尺寸。
点击线框连接点,拖动就可以修改碰撞体的大小,同时在Inspector检视面板中看到
上图中的中心点的Y值和半径Radius值就随之改变了。对于圆形来讲,只需要圆心和半径就能确定它的大小了。这一点应该很容易理解。当然我们还可以通知修改数值改变大小。
Is Trigger是一个触发选项,后面我们会详细介绍它。
Material代表物理材质。当碰撞体相互作用时,它们的表面需要模拟所应代表的材质的属性。例如,一块冰将是光滑的,而橡胶球将提供大量摩擦力并且弹性很好。虽然碰撞时碰撞体的形状不会变形,但可以使用 Physics Materials(物理材质)配置碰撞体的摩擦力和弹力。
Center就是碰撞体的中心,默认X/Y/Z都是0,等效于于局部坐标系原点。
Radius是圆形碰撞体的半径大小,默认值是0.5。
如果是盒型碰撞体的话,这里应该是Size属性,其X/Y/Z代表盒性的长宽高。
如果是胶囊碰撞体的话,这里应该是Radius和Height,以及Direction三个属性。其中Radius代表胶囊体的半径,Height代表胶囊体的高度,而Direction则是局部空间中纵向方向的轴,默认是Y轴。胶囊体通常用来模拟“人形”形状进行碰撞检测,因此多用于人物角色上。
我们使用碰撞体的时候,最重要的注意点就是,让碰撞体的尺寸能够恰当的包裹住我们的模型。因为我们是在Unity上创建的球体,而Unity会根据球体的尺寸自动匹配添加球型碰撞体。因此,球体模型和球型碰撞体的尺寸是非常吻合的。但是,如果是我们自己手动导入的FBX格式的3D模型,Unity就不能保证碰撞体能够恰当的包裹住3D模型了。碰撞体能够恰当的包裹3D模型非常的重要,这个将直接决定我们游戏中模型之间的碰撞检测,因为碰撞体是不可见的,我们只能通过模型与模型的距离来检查是否发生碰撞。但是我们自己都很明白,模型与模型的距离并不代表碰撞体与碰撞体之间的距离。如果模型与碰撞体不能恰当的包裹,那么我们可能在视觉上产生很大的差异,影响游戏体验。
本课程涉及的内容已经共享到百度网盘:https://pan.baidu.com/s/1e1jClK3MnN66GlxBmqoJWA?pwd=b2id
相关文章:

第二十六章 Unity碰撞体Collision(上)
在游戏世界中,游戏物体之间的交互都是通过“碰撞接触”来进行交互的。例如,攻击怪物则是主角与怪物的碰撞,触发机关则是主角与机关的碰撞。在DirectX课程中,我们也大致介绍过有关碰撞检测的内容。游戏世界中的3D模型的形状是非常复…...
Qt Installer Framework使用教程:
步骤一: 下载并安装Qt Installer Framework工具 http://download.qt.io/official_releases/qt-installer-framework/ 将安装目录添加到环境变量,如安装D盘时D:\Qt\QtIFW-4.5.0\bin 步骤二: 将测试例子(如D:\Qt\QtIFW-4.5.0\…...

nodejs+vue+java农村信息化服务平台
用户的登录模块:用户登录本系统,对个人的信息等进行查询,操作可使用的功能。 用户注册模块:游客用户可以进行用户注册,系统会反馈是否注册成功。 添加管理员模块:向本系统中添加更多的管理人员,…...
代码随想录补打卡 62不同路径 63 不同路径2
代码如下 func uniquePaths(m int, n int) int { dp : make([][]int,m) //定义一个二维数组 for i : 0 ; i < m ; i { //遍历这个二维数组的每个元素,并将每个元素都定义为一个一维数组 dp[i] make([]int,n) //这样就生成了图中的一个二维网格 dp[i][0] …...

树的存储和遍历
文章目录 6.5 树与森林6.5.1 树的存储结构1. 双亲表示法(顺序存储结构)2 孩子链表表示法3 孩子兄弟表示法(二叉树表示法) 6.5.2 森林与二叉树的转换1 树转换成二叉树2 二叉树转换成树3 森林转换成二叉树4 二叉树转换成森林 6.5.3 树和森林的遍历1. 树的遍历2. 森林的遍历 6.6 赫…...

MySQL的ID用完了,怎么办?
目 录 一 首先首先分情况 二 自增ID 1 mysql 数据库创建一个自增键的表 2 导出表结构 3 重新创建 自增键是4294967295的表 4 查看表结构 5 异常测试 三 填充主键 1 首先创建一个test 表,主键不自增 2 插入主键最大值 3 再次插入主键最大值1 四 没有声明…...
JSP基于Iptables图形管理工具的设计与实现(源代码+论文)
Netfilter/Iptables防火墙是Linux平台下的包过滤防火墙,Iptables防火墙不仅提供了强大的数据包过滤能力,而且还提供转发,NAT映射等功能,是个人及企业级Linux用户构建网络安全平台的首选工具。但是,由于种种原因&#x…...

什么是数据库分片?
什么是数据库分片? 数据库分片是指将一个大型数据库拆分成多个小型数据库,每个小型数据库称为一个分片。通过这种方式,可以将数据库的负载分散到多个服务器上,从而提高数据库的性能和可伸缩性。 为什么需要数据库分片?…...

软件工程知识点
软件工程提出的时代和背景 软件工程化的层次 软件开发过程 敏捷与计划开发 演化式开发和DevOps 软件配置管理过程和相关工具名 软件质量和代码异味 能够分析常见的代码异味和bug 代码复杂度和计算圈复杂度 了解代码异味和重构行为的关系 了解自动化单元测试框架xunit…...
华为OD机试 - 投篮大赛(Python)
题目描述 你现在是一场采用特殊赛制投篮大赛的记录员。这场比赛由若干回合组成,过去几回合的得分可能会影响以后几回合的得分。 比赛开始时,记录是空白的。 你会得到一个记录操作的字符串列表 ops,其中ops[i]是你需要记录的第i项操作,ops遵循下述规则: 整数x-表示本回合…...

《花雕学AI》讯飞星火认知大模型的特点和优势,与ChatGPT的对比分析
引言: 人工智能是当今科技领域的热门话题,自然语言处理是人工智能的重要分支。自然语言处理的目标是让计算机能够理解和生成自然语言,实现人机交互和智能服务。近年来,随着深度学习的发展,自然语言处理领域出现了许多创…...

【Python入门】Python的判断语句(if else 语句)
前言 📕作者简介:热爱跑步的恒川,致力于C/C、Java、Python等多编程语言,热爱跑步,喜爱音乐的一位博主。 📗本文收录于Python零基础入门系列,本专栏主要内容为Python基础语法、判断、循环语句、函…...
(4.28-5.4)【大数据新闻速递】数字中国峰会成功举办;“浙江数据知识产权登记平台”上线;贵州大数据活跃;AI教父从谷歌离职
01【2023年数字中国建设峰会数字福建分论坛成功举办】 2023年数字中国建设峰会数字福建分论坛由福建省人民政府主办,福建省数字福建建设领导小组办公室、数字中国研究院(福建)和福建省大数据集团承办。分论坛于2023年4月28日下午14:30 -17:3…...
领域驱动设计(Domain Driven Design)之建立领域模型
文章目录 用领域模型表达领域概念建立模型使用通用语言验证模型识别构造块类型设计聚合如何使用领域模型再次思考总结用领域模型表达领域概念 在实际项目中,模型设计者往往过早陷入具体构造块类型的识别,比如实体、聚合、领域服务,而忽略了领域模型表达领域概念的目的。我们…...

有研究员公开了一个解析并提取 Dell PFS BIOS 固件的工具(下)
导语:研究员公开了一个解析并提取 Dell PFS BIOS 固件的工具。 Apple EFI IM4P分配器 介绍 解析苹果多个EFI固件.im4p文件,并将所有检测到的EFI固件分割为单独的SPI/BIOS映像。 使用 你可以拖放或手动输入包含Apple EFI IM4P固件的文件夹的完整路径。…...
iOS开发系列--Swift语言
概述 Swift是苹果2014年推出的全新的编程语言,它继承了C语言、ObjC的特性,且克服了C语言的兼容性问题。Swift发展过程中不仅保留了ObjC很多语法特性,它也借鉴了多种现代化语言的特点,在其中你可以看到C#、Java、Javascript、Pyth…...

【MOMO】高水平期刊目录(持续更新)
高水平期刊目录 引言1 顶级期刊目录(A)1.1 IEEE Transactions on Intelligent Transportation Systems1.2 IEEE Transactions on Neural Networks and Learning Systems1.3 Engineering 2 权威期刊目录(A)2.1 Measurement 3 鼓励期…...

LVS负载均衡集群--DR模式
一、LVS-DR集群介绍 LVS-DR(Linux Virtual Server Director Server)工作模式,是生产环境中最常用的一 种工作模式。 1、LVS-DR 工作原理 LVS-DR 模式,Director Server 作为群集的访问入口,不作为网关使用࿰…...

RabbitMQ --- 死信交换机
一、简介 1.1、什么是死信交换机 什么是死信? 当一个队列中的消息满足下列情况之一时,可以成为死信(dead letter): 消费者使用basic.reject或 basic.nack声明消费失败,并且消息的requeue参数设置为false…...

如何在个人web项目中使用会话技术(cookiesession)?
编译软件:IntelliJ IDEA 2019.2.4 x64 操作系统:win10 x64 位 家庭版 服务器软件:apache-tomcat-8.5.27 目录 一. 什么是会话?二. 为什么要使用会话技术?三. 如何使用会话技术?3.1 Cookie(客户端的会话技术…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...

华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...
SpringAI实战:ChatModel智能对话全解
一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM࿰…...

解析两阶段提交与三阶段提交的核心差异及MySQL实现方案
引言 在分布式系统的事务处理中,如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议(2PC)通过准备阶段与提交阶段的协调机制,以同步决策模式确保事务原子性。其改进版本三阶段提交协议(3PC…...