Unity(2022.3.38LTS) - 2D刚体

2024-08-24 10:04
文章标签 unity 2d 刚体 2022.3 38lts

本文主要是介绍Unity(2022.3.38LTS) - 2D刚体,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一.简介

二.组件详细介绍

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);}}
}

效果演示

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

就可以直着移动了。

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

这篇关于Unity(2022.3.38LTS) - 2D刚体的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1102167

相关文章

Matter.js:Web开发者的2D物理引擎

Matter.js:Web开发者的2D物理引擎 前言 在现代网页开发中,交互性和动态效果是提升用户体验的关键因素。 Matter.js,一个专为网页设计的2D物理引擎,为开发者提供了一种简单而强大的方式,来实现复杂的物理交互效果。 无论是模拟重力、碰撞还是复杂的物体运动,Matter.js 都能轻松应对。 本文将带你深入了解 Matter.js ,并提供实际的代码示例,让你一窥其强大功能

Unity Post Process Unity后处理学习日志

Unity Post Process Unity后处理学习日志 在现代游戏开发中,后处理(Post Processing)技术已经成为提升游戏画面质量的关键工具。Unity的后处理栈(Post Processing Stack)是一个强大的插件,它允许开发者为游戏场景添加各种视觉效果,如景深、色彩校正、辉光、模糊等。这些效果不仅能够增强游戏的视觉吸引力,还能帮助传达特定的情感和氛围。 文档

Unity协程搭配队列开发Tips弹窗模块

概述 在Unity游戏开发过程中,提示系统是提升用户体验的重要组成部分。一个设计良好的提示窗口不仅能及时传达信息给玩家,还应当做到不干扰游戏流程。本文将探讨如何使用Unity的协程(Coroutine)配合队列(Queue)数据结构来构建一个高效且可扩展的Tips弹窗模块。 技术模块介绍 1. Unity协程(Coroutines) 协程是Unity中的一种特殊函数类型,允许异步操作的实现

Unity 资源 之 Super Confetti FX:点亮项目的璀璨粒子之光

Unity 资源 之 Super Confetti FX:点亮项目的璀璨粒子之光 一,前言二,资源包内容三,免费获取资源包 一,前言 在创意的世界里,每一个细节都能决定一个项目的独特魅力。今天,要向大家介绍一款令人惊艳的粒子效果包 ——Super Confetti FX。 二,资源包内容 💥充满活力与动态,是 Super Confetti FX 最显著的标签。它宛如一位

Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(4)

本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正​​ Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(3)-CSDN博客  这节就是真正的存储数据了   理清一下思路: 1.存储路径并检查 //2进制文件类存储private static string Data_Binary_Pa

Unity Adressables 使用说明(一)概述

使用 Adressables 组织管理 Asset Addressables 包基于 Unity 的 AssetBundles 系统,并提供了一个用户界面来管理您的 AssetBundles。当您使一个资源可寻址(Addressable)时,您可以使用该资源的地址从任何地方加载它。无论资源是在本地应用程序中可用还是存储在远程内容分发网络上,Addressable 系统都会定位并返回该资源。 您

Unity Adressables 使用说明(六)加载(Load) Addressable Assets

【概述】Load Addressable Assets Addressables类提供了加载 Addressable assets 的方法。你可以一次加载一个资源或批量加载资源。为了识别要加载的资源,你需要向加载方法传递一个键或键列表。键可以是以下对象之一: Address:包含你分配给资源的地址的字符串。Label:包含分配给一个或多个资源的标签的字符串。AssetReference Obj

在Unity环境中使用UTF-8编码

为什么要讨论这个问题         为了避免乱码和更好的跨平台         我刚开始开发时是使用VS开发,Unity自身默认使用UTF-8 without BOM格式,但是在Unity中创建一个脚本,使用VS打开,VS自身默认使用GB2312(它应该是对应了你电脑的window版本默认选取了国标编码,或者是因为一些其他的原因)读取脚本,默认是看不到在VS中的编码格式,下面我介绍一种简单快

Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(3)

本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正​​ Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(2) (*****生成数据结构类的方式特别有趣****)-CSDN博客 做完了数据结构类,该做一个存储类了,也就是生成一个字典类(只是声明)  实现和上一节的数据结构类的方式大同小异,所

【Unity小技巧】URP管线遮挡高亮效果

前言 在URP渲染管线环境下实现物体遮挡高亮显示效果,效果如下: Unity URP遮挡高亮 实现步骤 创建层级,为需要显示高亮效果的物体添加层级,比如Player 创建一个材质球,也就是高亮效果显示的材质球找到Universal Renderer Data Assets 4.在Assets上添加两个Render Objects组件 第一个做如下三处设置 指定遮挡层级指