Unity学习笔记(一)如何实现物体之间碰撞

news2024/12/15 6:09:36

前言

本文为Udemy课程The Ultimate Guide to Creating an RPG Game in Unity学习笔记

如何实现物体之间碰撞

实现物体之间的碰撞关键组件:Rigidbody 2D(刚体)、Collider 2D(碰撞体)、Sprite Renderer(Sprite渲染器)

实现物体之间的碰撞

第一步:让物体拥有物理规则

先创建一个物体的渲染器,命名为 Circle

在这里插入图片描述

在Circle对象中创建 Rigidbody 2D(刚体),并设置重力

在这里插入图片描述

效果如下,可以看到圆下落了,我们也可以通过调整重力的大小来让它更快的下降

请添加图片描述

这里没有能掉落在平台,原因是 unity 的物体接触是通过碰撞体(Collider)来实现的,而圆没有设置碰撞体(Collider)

第二步:给物品设置碰撞体(Collider)

unity 的物体接触是通过碰撞体(Collider)来实现的

现在我们来给圆设置 Collider
在这里插入图片描述
效果如下

扩展案例请添加图片描述

球碰到地面后弹出起来并在斜的平台上滑动

实现的关键:

  • 物理机制组件:Rigidbody 2D 设置添加材质(Physics Material 2D)
  • 碰撞检查组件:Collider

在这里插入图片描述
在这里插入图片描述

实现效果如下
请添加图片描述

这里放 Rigidbody 2D 和 Collider 的材质有什么不同,看下面解析

我们这里需要球自身的弹跳和摩擦,所以放在 Rigidbody 里面了

Rigidbody 2D

Rigidbody 2D 是用于在 2D 空间中处理物理行为的核心组件,广泛用于 2D 游戏引擎(如 Unity)。它使游戏对象能够根据物理规则进行运动和交互。

核心功能
  1. 物理属性
    1. 质量(Mass):定义物体的重量,影响加速度和碰撞反应。
    2. 重力(Gravity Scale):控制物体受到重力影响的程度,0 表示无重力。
    3. 线性阻尼(Linear Drag):模拟空气阻力,减缓物体的线性速度。
    4. 阻尼(Angular Drag):影响物体旋转时的阻力。
  2. 运动控制
    1. 速度(Velocity):通过调整线性和角速度,控制物体移动和旋转。
    2. 力(Force)与冲量(Impulse):使用 AddForceAddTorque 应用推力或旋转力。
    3. 运动类型
      • 动态(Dynamic):完全受物理引擎控制。
      • 静态(Static):不会受物理影响(常用于地形)。
      • 运动学(Kinematic):由脚本控制,不受物理引擎影响。
  3. 碰撞检测
    1. 配合 Collider 2D 使用(如 BoxCollider2D、CircleCollider2D)。
    2. 配置检测模式(如离散或连续)以减少穿透现象。
使用场景
  • 角色控制器:使用 Rigidbody 2D 模拟角色跳跃、移动或受到物理效果。
  • 物理互动:让物体能够因力而运动或被碰撞推动。
  • 游戏机制:例如投掷物体、摆动绳索或模拟重力。

Collider 2D

Collider 2D 是用于定义物体形状的组件,主要应用于 2D 游戏物理系统中,用于检测碰撞或触发器事件。它与 Rigidbody 2D 配合使用,可以模拟真实的物理交互,如碰撞反应、物体阻挡或触发事件。

作用
  1. 碰撞检测
    1. 定义物体的物理边界,使其能够检测到与其他 Collider 2D 的碰撞。
    2. 常用于地形、角色、障碍物等游戏元素。
  2. 触发检测
    1. 设置为 触发器(Is Trigger) 时,不再物理阻挡其他物体,但可以检测穿过的对象,常用于检测区域、传送门等。
  3. 优化性能
    1. 提供高效的几何形状检测,而不需要完整的网格数据。
常见的 Collider 2D 类型
Collider 类型描述
Box Collider 2D用于矩形物体,如平台、墙壁等。
Circle Collider 2D用于圆形物体,如球体或圆形区域检测。
Polygon Collider 2D用于复杂的多边形形状,自动生成顶点。
Edge Collider 2D用于创建一条开放的线段,适合地形边缘等。
Capsule Collider 2D用于胶囊形状,适合角色头顶和底部圆滑的碰撞检测。
Composite Collider 2D将多个简单 Collider 组合成更复杂的形状(通常与 Tilemap 一起使用)。
Collider 2D 的重要属性
  1. Is Trigger
    1. 勾选后,Collider 不会物理阻挡,但可以触发事件(如 OnTriggerEnter2D)。
  2. Material(Physics Material 2D)
    1. 控制碰撞时的摩擦力和弹性。
  3. Offset
    1. 调整 Collider 相对于对象位置的偏移。
  4. Used by Composite
    1. 将当前 Collider 与 Composite Collider 配合使用,优化性能或简化形状。
Collider 2D 与 Rigidbody 2D 的关系
  • 没有 Rigidbody 2D 的 Collider 被视为静态对象,仅用于检测碰撞,不会响应物理。
  • 带有 Rigidbody 2D 的 Collider 会受到物理引擎影响,可以移动、旋转和碰撞。

Sprite Renderer

Sprite Renderer 是 Unity 中用于在 2D 场景中显示精灵(Sprite)的组件,它负责将 2D 图像渲染到屏幕上,是 2D 游戏开发的核心工具之一。

功能
  1. 显示图像
    1. 将一个 Sprite 纹理分配到对象上进行渲染。
    2. 支持多种图片格式(如 PNG、JPG),通常使用透明背景的纹理。
  2. 控制外观
    1. 调整 Sprite 的颜色、透明度、渲染顺序等属性。
    2. 支持简单的动画或视觉效果(如通过脚本改变颜色)。
  3. 与其他组件交互
    1. 可以与 AnimatorRigidbody 2DCollider 2D 一起使用,制作动态和交互式对象。
主要属性
  1. Sprite
    1. 指定 Sprite 图像资源。
    2. 在 Unity 中,Sprite 是一种特殊的 2D 图形资源,可以通过 Sprite Editor 编辑裁剪。
  2. Color
    1. 设置 Sprite 的颜色和透明度。
    2. 默认为白色(RGBA(255,255,255,255)),表示图像显示其原始颜色。
  3. Flip
    1. Flip X:水平翻转。
    2. Flip Y:垂直翻转。
    3. 常用于角色左右移动的视觉效果。
  4. Material
    1. 定义 Sprite 的材质(如标准材质或自定义 Shader)。
    2. 可以实现特殊的渲染效果,如光照或像素化。
  5. Sorting Layer
    1. 指定 Sprite 所在的渲染层,用于控制渲染顺序。
    2. 可通过自定义层级分组(如背景、前景、角色)。
  6. Order in Layer
    1. 定义 Sprite 在同一层内的渲染顺序。
    2. 值越大,越靠前显示。
常见用法
  1. 角色渲染
    1. 用于显示角色的静态或动态动画帧。
    2. 搭配 Animator 或脚本实现动画切换。
  2. 背景和场景元素
    1. 用于绘制游戏的背景图、障碍物、装饰物等。
  3. 效果实现
    1. 使用材质或 Shader 实现闪烁、渐变、发光等视觉效果。

Physics Material 2D

Physics Material 2D(物理材质 2D) 是在 游戏开发物理仿真 中,用于定义 2D 物理引擎中对象的物理交互属性的工具。以下是其核心概念和应用:

核心属性
  1. 摩擦系数(Friction)
    1. 决定物体之间滑动的阻力。
    2. 高摩擦值:表面更“粘”,滑动阻力大(如橡胶)。
    3. 低摩擦值:表面更光滑,物体易滑动(如冰)。
  2. 弹性(Bounciness/Restitution)
    1. 定义物体碰撞后的弹跳程度。
    2. 值为 1.0:完全弹性(没有能量损失)。
    3. 值为 0.0:无弹性(碰撞后停止)。
应用场景
  • 游戏开发
    • 制作滑动平台(如冰面)或“黏性”地面效果。
    • 模拟运动游戏中的物体弹跳行为(如篮球、弹簧)。
  • 物理仿真
    • 用于模拟滑动摩擦、碰撞等现实物理现象。
  • 特效设计
    • 用于粒子系统或可破坏场景的真实交互模拟。
如何在 Unity 中应用 Physics Material 2D

Unity 中,Physics Material 2D 是一个用于调整 2D 物理行为的组件,可以控制物体的 摩擦力弹性

将材质附加到 2D Collider 上

  • 在场景中选择需要使用的物体。
  • 确保物体有一个 2D 碰撞器组件(如 BoxCollider2DCircleCollider2D 等)。
  • 在 Collider 的 Material 属性中,拖入创建的 Physics Material 2D 文件。

验证效果

  • 为 Rigidbody2D 添加物理行为(如重力或移动)。
  • 运行场景,观察物体在碰撞时的滑动或弹跳效果。
  • 根据需要调整摩擦和弹性值。
Physics Material 2D 的典型用例
  1. 模拟冰面或光滑地板
    1. 摩擦系数:0.1 或更低。
    2. 弹性系数:0.0(无弹性)。
  2. 弹性物体(如篮球)
    1. 摩擦系数:0.5(适中)。
    2. 弹性系数:0.8 或更高。
  3. 粗糙表面(如沙地或草地)
    1. 摩擦系数:1.0 或更高。
    2. 弹性系数:0.0(无反弹)。
材质(Physics Material)放在 Rigidbody 2D 和 Collider有什么区别

在 Unity 中,将 Physics Material 2D(物理材质)应用于 Rigidbody 2DCollider 2D 都会影响物体的物理交互行为,但其应用方式和效果有明显的区别。以下是详细的比较与说明:

  1. 将物理材质放在 Collider 2D
  • 效果
    • 直接影响该 Collider 的碰撞行为,例如摩擦力和弹性。
    • 如果一个物体有多个 Collider,它们可以有不同的物理材质,从而产生不同的物理效果。
  • 用途
    • 用于定义物体的表面特性。
    • 场景示例
      • 一个篮球的碰撞弹性和地板的摩擦分别由它们的 Collider 上的物理材质控制。
  • 关键点
    • 每个 Collider 的物理材质是独立的,互不影响。
    • 适合有复杂物体(多个 Collider)的情况,允许细粒度控制。
  1. 将物理材质放在 Rigidbody 2D
  • 效果
    • Rigidbody 2D 本身并不直接接受物理材质的应用。
    • 物理材质始终需要绑定在 Collider 2D 上,Rigidbody 2D 是用来控制整体物体的动力学行为(如质量、重力和力的应用)。
  • 关键点
    • 如果物体包含多个 Collider,物理行为由每个 Collider 上的物理材质决定,而不是 Rigidbody。
    • Rigidbody 是物体的运动主体,不负责单独的摩擦或弹性计算。
  1. 主要区别与实践

功能Collider 2D 上的物理材质Rigidbody 2D 上(无直接效果)是否能直接设置是,物理材质直接绑定到 Collider 的 Material 属性。否,Rigidbody 不接收物理材质。摩擦力和弹性影响决定该 Collider 的摩擦系数和弹性系数。需要通过附加在物体上的 Collider 实现效果。多 Collider 行为每个 Collider 可有独立的物理材质,行为独立。由多个 Collider 的物理材质共同决定物体整体行为。适用场景需要为物体的不同部分设定不同的物理特性。用于控制整体物体的质量、重力或力学行为。

  1. 示例场景
场景 1:简单物体
  • 描述:一个篮球需要高弹性,地板需要高摩擦。
  • 实现
    • 在篮球的 CircleCollider2D 上设置高弹性材质(Bounciness=0.9)。
    • 在地板的 BoxCollider2D 上设置高摩擦材质(Friction=0.8)。
场景 2:复杂物体
  • 描述:一个物体有多个部分(例如,汽车),需要不同的物理特性。
  • 实现
    • 每个部件的 Collider 设置独立的物理材质,例如轮胎的 Collider 设置高摩擦,车身的 Collider 设置低摩擦。
场景 3:统一物体
  • 描述:一个角色只有一个 Rigidbody 和一个 Collider。
  • 实现
    • 将物理材质直接放在唯一的 Collider 上,整体受一个物理材质影响。
  1. 注意事项
  2. 物理材质必须绑定在 Collider 上
    1. Rigidbody 本身不能直接绑定物理材质。
    2. 如果想改变物体的摩擦或弹性,需要在 Collider 的 Material 属性中设置。
  3. 多个 Collider 时的材质组合
    1. 如果一个 Rigidbody 下有多个 Collider,各 Collider 的物理材质会独立起作用,Unity 引擎会综合计算其交互效果。
  4. 性能优化
    1. 为复杂的动态物体使用尽量少的 Collider,以降低性能消耗。
总结
  • Collider 2D 上的物理材质控制物体的表面物理属性(摩擦和弹性)
  • Rigidbody 2D 控制物体的运动和动力学行为,但不直接接受物理材质设置。 如果你的场景中有多个部分需要不同的物理特性,材质应该绑定在相应的 Collider 上。

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

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

相关文章

MATLAB 平面直线与直线求交(99)

MATLAB 平面直线与直线求交(99) 一、算法介绍二、算法实现1.代码2.结果一、算法介绍 平面上,给定两直线,直线由两个点确定,计算直线与直线的交点,理论上只要不平行就有交点,下面是计算代码和效果: 二、算法实现 1.代码 代码如下(示例): % 示例用法 % 定义两条线…

STM32单片机芯片与内部21 电源管理——低功耗 睡眠模式 停止模式 待机模式

目录 一、SMT32电源框图 1、ADC电源与参考电压VDDA 2、调压器供电电路VDD/1.8V 3、备份域电路 二、电源监控器 1、上电复位与掉电复位(POR与PDR) 2、可编程电压检测器 PVD 三、功耗模式 1、睡眠模式 2、停止模式 3、待机模式 电源对电子设备的…

数智读书笔记系列006 协同进化:人类与机器融合的未来

书名:协同进化:人类与机器融合的未来 作者:[美]爱德华阿什福德李 译者:李杨 出版时间:2022-06-01 ISBN:9787521741476 中信出版集团制作发行 爱德华・阿什福德・李(Edward Ashford Lee)是一位在计算机科学与工程领域颇具影响力的学者&am…

计算机网络知识点全梳理(一.TCP/IP网络模型)

目录 TCP/IP网络模型概述 应用层 什么是应用层 应用层功能 应用层协议 传输层 什么是传输层 传输层功能 传输层协议 网络层 什么是网络层 网络层功能 网络层协议 数据链路层 什么是数据链路层 数据链路层功能 物理层 物理层的概念和功能 TCP/IP网络模型概述…

docker启动一个helloworld(公司内网服务器)

这里写目录标题 容易遇到的问题:1、docker连接问题 我来介绍几种启动 Docker Hello World 的方法: 最简单的方式: docker run hello-world这会自动下载并运行官方的 hello-world 镜像。 使用 Nginx 作为 Hello World: docker…

Ubuntu 安装texstudio sty与texlive

手动安装需要的包 访问CTAN网站(Comprehensive TeX Archive Network)并下载enumitem宏包: enumitem CTAN页面下载后,将宏包解压到/usr/share/texmf/tex/latex/下。 可打开texstudio/帮助/宏包帮助下载。 如果不想手动安装一个个…

游戏引擎学习第42天

仓库: https://gitee.com/mrxiao_com/2d_game 简介 目前我们正在研究的内容是如何构建一个基本的游戏引擎。我们将深入了解游戏开发的每一个环节,从最基础的技术实现到高级的游戏编程。 角色移动代码 我们主要讨论的是角色的移动代码。我一直希望能够使用一些基…

SEGGER | 基于STM32F405 + Keil - RTT组件01 - 移植SEGGER RTT

导言 RTT(Real Time Transfer)是一种用于嵌入式中与用户进行交互的技术,它结合了SWO和半主机的优点,具有极高的性能。 使用RTT可以从MCU非常快速输出调试信息和数据,且不影响MCU实时性。这个功能可以用于很多支持J-Link的设备和MCU&#xff0…

【01】mysql安装后MySQL Configurator无法启动的问题

安装完Mysql之后打开MySql Configurator提示MySQL Configurator Internal error.(值不能为null.参数名:input) The Configurator will now close. mysql安装后MySQL Configurator无法启动的问题 文章目录 mysql安装后MySQL Configurator无法启动的问题1.MySQL Configurator无法…

重生之我在异世界学编程之C语言:深入文件操作篇(下)

大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 函数递归与迭代 引言正文一、文件的基本操作&#…

【论文阅读笔记】One Diffusion to Generate Them All

One Diffusion to Generate Them All 介绍理解 引言二、相关工作三、方法预备知识训练推理实现细节训练细节 数据集构建实验分结论附录 介绍 Paper:https://arxiv.org/abs/2411.16318 Code:https://github.com/lehduong/onediffusion Authors&#xff1…

Qt知识之 2. Windows下使用QtCreator创建的CMake项目,配置CMakeLists.txt文件生成sln文件方案

1. 先使用QtCreator创建CMake项目 到构建系统时,选择CMake。 2. 创建完成后,进入该项目文件夹 3. 在该文件夹空白处,右键启动Powershell命令行窗口 4. 使用命令行前,记得在系统环境变量中配置所用编译器的环境变量,…

C语言实验 函数一

时间:2024.12.14 6-1 弹球距离 double dist (double h,double p) {double sum = h,height;height = h*p;while(height>=TOL){sum += height * 2; //上行下行都算,所以是两倍的距离。height *=p;}return sum; } 6-2 使用函数输出一个整数的逆序数 错误代码:运行超…

【C语言实现:用队列模拟栈与用栈模拟队列(LeetCode 225 232)】

LeetCode刷题记录 🌐 我的博客主页:iiiiiankor🎯 如果你觉得我的内容对你有帮助,不妨点个赞👍、留个评论✍,或者收藏⭐,让我们一起进步!📝 专栏系列:LeetCode…

STM32标准库学习之寄存器方法点亮LED灯

STM32C8T6最小系统开发板,点亮PC13引脚的LED灯 1.使能PC13引脚的定时器 PC13引脚为GPIOC组的第13个端口,GPIO的时钟使能定时器为RCC_APB2ENR,这是可以从手册中得出的,如下图所示 从下图可以得出,若要使能GPIOC端口&a…

探索 Echarts 绘图:数据可视化的奇妙之旅

目录 一、Echarts 初印象 二、搭建 Echarts 绘图环境 三、绘制第一个图表:柱状图的诞生 四、图表的美化与定制:让数据更具吸引力 1. 主题切换:一键变换风格 2. 颜色调整:色彩搭配的艺术 3. 标签与提示框:丰富信…

泷羽sec-burp(6)暴力破解与验证码识别绕过(下,验证码识别绕过0) 学习笔记

声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&a…

docker快速实现ELK的安装和使用

目录 一、ELK功能原理 二、项目功能展示​ 三、日志查询展示​ 四、ELK安装步骤 1、创建elasticsearch、kibana、filebeat相关data、log、conf目录 2、进入/usr/local/elk目录,并创建一个docker网络 3、启动 elasticsearch容器 4、运行kibana容器 5、启动f…

onnx算子的注册详解及案例 (完整版)

文章目录 1. 介绍1.1 导出onnx不成功1.2 分析和解决方案2. 案例2.1 Asinh算子注册2.1.1 导出onnx2.1.2 算子注册2.2 自定义算子的注册2.1 直接导出自定义算子2.2 自定义算子的注册并导出2.3 导出带deformable conv 的onnx2.3.1 直接导出deformable conv2.3.2 注册并导出deforma…

数据结构_拓扑排序

拓扑排序 (所有点按照先后顺序排序) 1.先找到入度为0的点,记录之后,删除这个点和它的出边; 2.若有两个可选,随便选择一个 例 a的入度为0,选a [a] 随便选一个 [a,e] 再找入度为0的点 再选c 最后选d 拓…