Unity(2022.3.38LTS) - 2D刚体

news2024/11/24 13:45:07

目录

一.简介

二.组件详细介绍

2D刚体

类型介绍

三. 刚体的简单使用



一.简介

2D 物理系统为开发者提供了强大的工具来模拟和控制二维游戏中的物理行为。

A、基本概念

  1. 刚体(Rigidbody 2D)

    • 刚体组件用于赋予游戏对象物理属性,使其能够受到重力、力、碰撞等物理效果的影响。
    • 可以设置刚体的质量、阻力、重力缩放等参数,以控制对象的运动行为。
    • 例如,一个平台跳跃游戏中的主角通常会添加刚体组件,使其能够在重力作用下下落,并在与平台碰撞时产生真实的反弹效果。
  2. 碰撞体(Collider 2D)

    • 碰撞体定义了游戏对象的形状和碰撞范围。不同类型的碰撞体包括矩形碰撞体(Box Collider 2D)、圆形碰撞体(Circle Collider 2D)、多边形碰撞体(Polygon Collider 2D)等。
    • 碰撞体与刚体结合使用,当两个带有碰撞体的游戏对象发生接触时,会触发碰撞事件。
    • 比如,在一个射击游戏中,子弹和敌人都需要添加碰撞体,以便在碰撞时产生伤害效果。

B、物理特性

  1. 重力

    • Unity 的 2D 物理系统默认会对带有刚体的游戏对象施加重力。可以调整重力的大小和方向,以适应不同的游戏场景。
    • 例如,在一个太空题材的游戏中,可以将重力设置为较小的值或者关闭重力,以模拟零重力环境。
  2. 摩擦力和弹力

    • 可以设置碰撞体的摩擦系数和弹力系数,以控制对象之间的摩擦和反弹效果。
    • 高摩擦系数会使对象在接触时更容易停止移动,而高弹力系数会使对象在碰撞时产生更强的反弹。
    • 比如,在一个冰面场景中,可以降低摩擦系数,使角色在冰面上滑行更加顺畅。
  3. 物理材质(Physics Material 2D)

    • 物理材质可以应用于碰撞体,以进一步控制碰撞的特性。可以设置物理材质的摩擦、弹力、密度等属性。
    • 例如,可以创建一个 “橡胶” 物理材质,用于模拟弹性物体的碰撞效果。

C、碰撞检测与响应

  1. 碰撞事件

    • Unity 提供了一系列碰撞事件函数,如 OnCollisionEnter2D、OnCollisionStay2D 和 OnCollisionExit2D,开发者可以在脚本中监听这些事件,并根据碰撞情况执行相应的逻辑。
    • 例如,当玩家角色与敌人碰撞时,可以触发战斗逻辑或者减少玩家的生命值。
  2. 触发碰撞(Trigger)

    • 可以将碰撞体设置为触发模式,当两个触发碰撞体发生接触时,会触发 OnTriggerEnter2D、OnTriggerStay2D 和 OnTriggerExit2D 事件。
    • 触发碰撞通常用于检测特定区域的进入或离开,比如检测玩家是否进入了一个奖励区域。

D、物理模拟的优化

  1. 层碰撞矩阵(Layer Collision Matrix)

    • 通过设置层碰撞矩阵,可以控制不同层之间的碰撞关系。可以选择哪些层之间应该发生碰撞,哪些层之间应该忽略碰撞。
    • 这对于优化游戏性能非常有用,特别是在处理大量游戏对象时。
    • 例如,可以将背景层和特效层设置为不发生碰撞,以减少不必要的物理计算。
  2. 静态碰撞体(Static Collider)

    • 如果一个游戏对象在游戏过程中不会移动,可以将其碰撞体设置为静态碰撞体。静态碰撞体会被物理引擎进行优化,提高性能。
    • 例如,游戏中的墙壁、地面等固定的物体可以设置为静态碰撞体。

二.组件详细介绍

2D刚体

属性:功能:
Body Type设置 2D 刚体的组件设置,从而可操纵移动(位置和旋转)行为和 2D 碰撞体交互。
选项为:__DynamicKinematicStatic__
Material使用此属性可为连接到特定父 2D 刚体的所有 2D 碰撞体指定公共材质。
注意:2D 碰撞体使用自己的 Material 属性(如果已设置)。如果此处或在 2D 碰撞体中未指定材质,则默认选项为 None (Physics Material 2D)。这种情况下使用可在 Physics 2D 窗口中设置的默认材质。
2D 碰撞体使用以下优先级顺序来确定要使用的 Material 设置:
1. 在 2D 碰撞体上指定的 2D 物理材质。
2.在附加的 2D 刚体上指定的 2D 物理材质。
在 Physics 2D 窗口中指定的 2D 物理材质默认材质。
提示:使用此设置确保附加到同一 Static Body Type 2D 刚体的所有 2D 碰撞体都可使用同一材质。
Simulated如果希望 2D 刚体以及所有附加的 2D 碰撞体和 2D 关节在运行时与物理模拟系统交互,请启用 Simulated__(选中复选框)。如果禁用此功能(取消选中复选框),这些组件不会与模拟系统进行交互。请参阅下面的 2D 刚体属性:Simulated 以了解更多详细信息。默认情况下会选中此框。 | | Use Auto Mass__如果希望 2D 刚体从其 2D 碰撞体中自动检测游戏对象的质量,请选中此框。
Mass定义 2D 刚体的质量。如果已选中 Use Auto Mass,此属性将显示灰色。
Linear Drag一种会影响位置移动的阻力系数。
Angular Drag一种会影响旋转移动的阻力系数。
Gravity Scale定义游戏对象受重力影响的程度。
Collision Detection定义如何检测 2D 碰撞体之间的碰撞。
        Discrete将 Collision Detection 设置为 Discrete 时,具有 2D 刚体和 2D 碰撞体的游戏对象在物理更新期间可以重叠或穿过彼此(如果移动得足够快)。仅会在新位置生成碰撞触点。
        ContinuousCollision Detection 设置为 Continuous 时,具有 2D 刚体和 2D 碰撞体的游戏对象在更新期间不会穿过彼此。相反,Unity 会计算 2D 碰撞体的第一个影响点,并将游戏对象移动到该点。请注意,此设置比 Discrete 耗费更多 CPU 时间。
Sleeping Mode定义游戏对象如何在处于静止状态时“睡眠”以节省处理器时间。
        Never Sleep禁用睡眠(应尽可能避免此设置,否则会影响系统资源)。
        Start Awake游戏对象最初处于唤醒状态。
        Start Asleep游戏对象最初处于睡眠状态,但可以被碰撞唤醒。
Interpolate定义如何在物理更新间隔之间插入游戏对象的移动(运动趋于颠簸状态时很有用)。
        None不应用移动平滑。
        Interpolate根据游戏对象在先前帧中的位置来平滑移动。
        Extrapolate根据游戏对象在下一帧中的估计位置来平滑移动。
Constraints定义对 2D 刚体运动的任何限制。
Freeze Position选择性停止 2D 刚体沿世界 X 和 Y 轴的移动。
Freeze Rotation选择性停止 2D 刚体围绕 Z 轴的旋转。

类型介绍

在 Unity 中,2D 刚体分为 Kinematic(运动学)类型和 Dynamic(动态)类型,它们具有不同的特性和用途。

一、Kinematic 类型的 2D 刚体

  1. 特点

    • 不受物理引擎的力和重力影响。这意味着它不会因为重力而自然下落,也不会被其他物体通过物理力推动。
    • 可以通过脚本直接控制其位置、旋转和速度等属性。这种直接控制使得开发者可以精确地控制物体的运动,非常适合用于需要精确控制运动轨迹的场景。
    • 可以与其他 Dynamic 类型的刚体或静态碰撞体发生碰撞,并触发相应的碰撞事件。但是,它不会对其他物体产生力的作用。
  2. 用途

    • 用于控制游戏中的平台、移动的障碍物等。例如,在一个平台跳跃游戏中,可以使用 Kinematic 类型的刚体来创建移动的平台,通过脚本控制平台的运动,让玩家可以在平台上跳跃和移动。
    • 制作动画效果。可以将动画与 Kinematic 类型的刚体结合起来,实现复杂的动画效果,同时还能与其他物体进行碰撞检测。
    • 实现特定的游戏逻辑。比如在一些解谜游戏中,需要通过精确控制物体的运动来触发特定的机关或完成特定的任务。

二、Dynamic 类型的 2D 刚体

  1. 特点

    • 受物理引擎的力、重力和摩擦力等影响。它会在重力作用下自然下落,并且可以被其他物体通过物理力推动。
    • 可以与其他 Dynamic 类型的刚体和静态碰撞体发生碰撞,并根据碰撞的情况产生相应的物理反应,如反弹、旋转等。
    • 具有质量、阻力等物理属性,可以通过调整这些属性来改变物体的运动行为。
  2. 用途

    • 模拟真实的物理效果。例如,在一个球类游戏中,球可以使用 Dynamic 类型的刚体,它会在重力作用下下落,并且在与地面或其他物体碰撞时产生真实的反弹效果。
    • 制作可互动的物体。玩家可以通过施加力或碰撞来影响 Dynamic 类型的刚体,从而实现与游戏世界的互动。
    • 增加游戏的随机性和真实感。由于 Dynamic 类型的刚体受到物理引擎的影响,其运动轨迹和行为具有一定的随机性,这可以增加游戏的真实感和趣味性。

三. 刚体的简单使用

代码

using UnityEngine;

public class Rigidbody2DController : MonoBehaviour
{
    public float moveSpeed = 5f;
    public float jumpForce = 10f;
    private Rigidbody2D rb;

    private void Start()
    {
        rb = GetComponent<Rigidbody2D>();
    }

    private void Update()
    {
        // 水平移动
        float horizontalInput = Input.GetAxis("Horizontal");
        rb.velocity = new Vector2(horizontalInput * moveSpeed, rb.velocity.y);

        // 跳跃
        if (Input.GetButtonDown("Jump"))
        {
            rb.AddForce(new Vector2(0f, jumpForce), ForceMode2D.Impulse);
        }
    }
}

效果演示

这个旋转问题可以点击这里

就可以直着移动了。

可以使用射线来判断,主角是否在地面上,来判断是否跳跃.

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

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

相关文章

消息过期时间设置:队列属性与消息TTL

消息过期时间设置&#xff1a;队列属性与消息TTL 1. 设置队列属性2. 对消息本身进行TTL设置3. 同时使用时的TTL确定 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在消息队列&#xff08;MQ&#xff09;中&#xff0c;设置消息的过期时间是…

RISC-V全志D1多媒体套件

RISC-V全志D1多媒体套件 此开发板的任何问题都可以在我们的论坛交流讨论 https://forums.100ask.net/c/aw/d1/57 硬件简述 D1主板 以下是主板图&#xff1a; D1板载功能 板载功能有&#xff1a; XR829 WIFI蓝牙模组芯片&#xff0c;Bluetooth支持标准蓝牙与 低功耗蓝牙&a…

WPF中的可视化树(VisualTree)和逻辑树(LogicalTree)

可视化树和逻辑树 我们先来理解一下什么是可视化树和逻辑树。 可视化树&#xff1a;包含最初指定的大多数元素&#xff08;在XAML或.cs中&#xff09;以及控件模板中的元素。 通俗点来讲&#xff0c;就是整个元素的构成树&#xff0c;从最上面的结点到最后一个结点&#xff…

华为:IT系统的演进与数字时代IT系统的重新定位

往期回顾&#xff1a; 企业4A架构&#xff1a;数字化转型的底层方法论&#xff08;附TOGAF资料下载&#xff09; PPT分享&#xff1a;数据治理的方法论、设计思路与方案&#xff08;干货&#xff09; 浅谈数字化转型方法论 110页PPT:xx业务流程优化&#xff08;BPR&#xff…

树状数组算法

文章目录 树状数组是什么树状数组与线段树的区别与联系树状数组讲解点修&#xff0c;区查&#xff0c;讲解及模板点查&#xff0c;区修讲解及模板 树状数组是什么 树状数组是一种数据结构&#xff0c;提供O(logn)时间内的单点修改和区间求和操作&#xff0c;比线段树有更优的常…

语音控制开关的语音识别ic芯片方案

语音控制开关是一种基于语音识别技术的设备&#xff0c;它通过内置的语音识别芯片&#xff0c;将用户的语音指令转化为电信号&#xff0c;从而实现对设备的控制。例如在智能家居设备上的应用&#xff0c;通常需要连接到家庭的Wi-Fi网络上&#xff0c;以便与智能手机或智能音箱等…

openjdk11 jvm视角查看java线程异常退出synchronized锁自动释放

##synchronized锁异常 java代码demo public class ThreadTest {public int mul 1;public static void main(String[] args) {ThreadTest threadTest new ThreadTest();Thread yym_user_thread1 new Thread() {public void run() {System.out.println("yym_user_thread…

【C++题解】1147. 求1/1+1/2+2/3+3/5+5/8+8/13+13/21……的前n项的和

欢迎关注本专栏《C从零基础到信奥赛入门级&#xff08;CSP-J&#xff09;》 问题&#xff1a;1147. 求1/11/22/33/55/88/1313/21……的前n项的和 类型&#xff1a;函数 题目描述&#xff1a; 求1/11/22/33/55/88/1313/2121/34…的前 n 项的和。 输入&#xff1a; 输入一个…

WPF—路由事件详解

WPF—路由事件 路由事件是一种可以针对元素树中的多个侦听器而不是仅仅针对引发该事件的对象调用处理程序的事件。路由事件是一个CLR事件。 路由事件与一般事件的区别在于&#xff1a;路由事件是一种用于元素树的事件&#xff0c;当路由事件触发后&#xff0c;它可以向上或向…

C++ | Leetcode C++题解之第371题两整数之和

题目&#xff1a; 题解&#xff1a; class Solution { public:int getSum(int a, int b) {while (b ! 0) {unsigned int carry (unsigned int)(a & b) << 1;a a ^ b;b carry;}return a;} };

微程序控制器的设计

目录 一、微程序控制器的原理 1.模仿高级语言思想到微程序&#xff1a; 2.采用存储程序思想到CU内构造&#xff1a; 3.微程序执行过程&#xff1a; 二、微指令的设计 1.前置概念&#xff1a; 相容性微命令&#xff1a; 互斥性微命令&#xff1a; 2.微指令格式 水平…

作者推荐 |【Redis技术进阶之路】「技术提升系列」夯实基础分析探究ziplist压缩列表的点点滴滴

揭秘高效存储模型与数据结构底层实现 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 压缩列表&#xff08;ziplist&#xff09;压缩列表使用目的压缩列表结构组成压缩列表的各个组成部分三个…

flv格式分析与解复用

介绍 FLV(Flash Video)是Adobe公司推出的⼀种流媒体格式&#xff0c;由于其封装后的⾳视频⽂件体积⼩、 封装简单等特点&#xff0c;⾮常适合于互联⽹上使⽤。⽬前主流的视频⽹站基本都⽀持FLV。采⽤FLV 格式封装的⽂件后缀为.flv。 FLV封装格式是由⼀个⽂件头(file header)和 …

0基础深度学习项目13:基于TensorFolw实现天气识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目录 一、创建环境二、前期准备2.1 设置GPU2.2 导入数据2.3 数据预处理2.3.1 加载数据2.3.2 查看图像的标签 2.4 数据可视化 三、构建简单的CNN网络&#xff0…

NVDLA专题12:具体模块介绍——RUBIK

概述 RUBIK类似于BDMA&#xff0c;它无需任何数据计算对数据映射格式进行转换。RUBIK有3种工作模式&#xff0c;分别是: 合并(Contract)数据立方体将特征数据立方体分割为多平面&#xff08;multi-planar&#xff09;格式将多平面(multi-planar)格式合并到数据立方体 由于该…

第三十八篇-TeslaP40-SenseVoice部署,速速杠杠的

环境 系统&#xff1a;CentOS-7 CPU: 14C28T 内存&#xff1a;32G 显卡&#xff1a;Tesla P40 24G 驱动: 535 CUDA: 12.2创建环境 conda create -n sv python3.11 -y conda activate sv克隆 git clone https://github.com/FunAudioLLM/SenseVoice.git cd SenseVoice配置镜像…

React antd Table表格动态合并单元格

注意&#xff1a; ① 采用的是React antDsign 4.x版本 ② 需重新处理data数据 实现效果 代码实现 import React from react; import { Table } from antd;const data [{key: 0,name: 张三,age: 22,sex: 男,},{key: 1,name: 李四,age: 42,sex: 男,},{key: 2,name: 小丽,age: …

CAN的协议层介绍

一&#xff0c;CAN帧种类介绍 1. 数据帧&#xff08;Data Frame&#xff09;&#xff1a;数据帧是CAN总线上用于传输用户数据的帧&#xff0c;包括必要的帧头、标识符、控制位、数据长度代码、数据域、CRC校验码和应答域等部分&#xff0c;是CAN通信中最基本和最重要的帧类型。…

Android Room DataBase

Room数据库是在Sqlite的基础上&#xff0c;进行了封装和优化。这让我们可以摆脱&#xff0c;繁琐的数据库操作 在module的gradle里面&#xff0c;加入: dependencies {annotationProcessor "androidx.room:room-compiler:2.3.0"implementation androidx.room:room-…

Selenium自动化测试 常见API的使用

本篇文章内容是关于 Selenium 自动化测试工具的常见 API 的使用 Selenium版本&#xff1a;4.23.1 编程语言&#xff1a;Java JDK22 编译器&#xff1a;IDEA 2024.2.0.2 浏览器版本&#xff1a;谷歌浏览器128.0.6613.36&#xff08;正式版本&#xff09; &#xff08;64 位&…