Unity(2022.3.41LTS) - 角色控制器和3D刚体

2024-08-30 10:20

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

目录

一. 角色控制

二. 3D刚体



一. 角色控制

名称:功能:
坡度限制将碰撞器限制为仅爬升比指示值更陡峭(以度为单位)的斜坡。
步长偏移只有当楼梯离地面比指示值更近时,角色才会爬上楼梯。此值不应大于 Character Controller 的高度,否则将生成错误。
蒙皮宽度两个碰撞体可以相互穿透,深度可达其 Skin Width (蒙皮宽度)。较大的 Skin Width 可减少抖动。低 Skin Width 会导致角色卡住。一个好的设置是将该值设为 Radius 的 10%。
最小移动距离如果角色尝试移动到指示值以下,则它根本不会移动。这可用于减少抖动。在大多数情况下,此值应保留为 0。
中心这将在世界空间中偏移胶囊碰撞体,并且不会影响角色的旋转方式。
半径胶囊碰撞体半径的长度。这实际上是碰撞体的宽度。
高度角色的胶囊碰撞器
高度。更改此设置将沿 Y 轴在正方向和负方向上缩放碰撞体。

Character Controller(角色控制器)

  1. 功能特点:

    • 主要用于模拟角色的基本运动,如行走、跑步、跳跃等,而不依赖于物理引擎的刚体。
    • 可以方便地控制角色与场景中的物体进行碰撞检测,避免角色穿透墙壁等物体。
    • 提供了一些内置的属性和方法,用于设置角色的速度、重力、碰撞响应等。
  2. 主要属性:

    • Slope Limit:限制角色可以攀爬的最大坡度。
    • Step Offset:角色可以跨越的台阶高度。
    • Skin Width:用于碰撞检测的皮肤宽度,以避免角色在与物体接近时出现抖动。
    • Min Move Distance:如果角色的移动距离小于这个值,则不会进行移动,以避免微小的移动导致不必要的计算。
  3. 使用方法:

    • 通过脚本获取 Character Controller 组件,并在 Update 函数中使用 Move 方法来实现角色的移动。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class PlayerMove : MonoBehaviour
{public float speed;private CharacterController controller;// Start is called before the first frame updatevoid Start(){controller = GetComponent<CharacterController>();}// Update is called once per framevoid Update(){Vector3 moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));moveDirection = transform.TransformDirection(moveDirection);controller.Move(moveDirection * speed * Time.deltaTime);}
}

二. 3D刚体

名称  功能
质量定义游戏对象的质量(以千克为单位)。默认情况下,Mass 设置为 1。与现实生活中一样,质量不会影响物品在重力作用下的速度。要模拟减慢运动速度的阻力,请使用 Drag (拖动)。
定义刚体线速度的衰减率,以模拟阻力、空气阻力或摩擦力。较低的值会产生较慢的衰减速率,因此游戏对象的移动速度会更长(这对于模拟繁重的现实世界对象非常有用)。较高的值会产生更快的衰减速率,因此游戏对象会在短时间内减慢速度(这对于模拟轻量级真实世界对象非常有用)。
角度阻力定义刚体旋转速度的衰减率,以模拟阻力、空气阻力或摩擦力。较低的值会产生较慢的衰减速率,因此游戏对象的移动速度会更长(这对于模拟繁重的现实世界对象非常有用)。较高的值会产生更快的衰减速率,因此游戏对象会在短时间内减慢速度(这对于模拟轻量级真实世界对象非常有用)。请注意,不能仅通过将游戏对象的 Angular Drag 设置为无穷大来使游戏对象停止旋转。默认情况下,Angular Drag 设置为 0.05。
自动质心启用 Automatic Center Of Mass (自动质心) 以使用物理系统根据刚体的形状和比例预测的刚体质心。禁用可设置您自己的质心 X、Y 和 Z 坐标。
自动张量启用 Automatic Tensor (自动张量) 以使用物理系统对刚体的预测张量和张量旋转,基于所有连接的碰撞器
.与质量一样,惯性张量定义使刚体移动所需的力或扭矩;但是,质量影响线性运动,而惯性张量影响旋转运动。禁用 可改为张量设置您自己的 X、Y 和 Z 坐标(请参阅下面的属性)。
惯性张量定义此刚体的惯性张量。Inertia Tensor 值越高,使刚体绕其轴旋转所需的扭矩就越大。
惯性张量旋转定义惯性张量的旋转。
使用重力切换 Rigidbody 上的重力效果。如果启用,物理系统将施加一个力,使游戏对象沿模拟重力的方向移动(默认情况下,沿 y 轴向下移动)。默认情况下,Use Gravity 处于启用状态。
是运动学的在游戏对象的基于物理的运动和运动之间切换。启用 Is Kinematic 后,物理系统无法施加力来移动或旋转游戏对象,而 Unity 只能通过其 Transform 移动和旋转游戏对象。有关详细信息,请参阅刚体物理特性简介:没有基于物理的运动的刚体。默认情况下,Is Kinematic 处于禁用状态。
插话刚体上的 Interpolate (插值) 设置提供了两个选项,如果刚体运动在运行时出现抖动,则用于平滑刚体运动的外观。这些选项包括 Interpolate (插值) 和 Extrapolate (外插)。

interpolation (插值) 和 Extrapolation (外插) 都会计算物理更新之间刚体的姿势 (即位置和旋转)。您应该选择哪一个选项取决于哪个选项为您的使用案例产生最佳视觉效果。

有关 Interpolate 属性的详细信息,请参阅将插值应用于刚体。
没有不应用插值或外插。这是默认选项。
插话使用前两次物理更新中刚体的姿势和速度来计算和应用刚体在当前帧中的姿势。

Interpolate 比 Extrapolate 更准确,但它有一个物理更新的时间滞后。这通常最适合准确性很重要的情况;例如,如果刚体的速度发生变化,或者有其他物理元素影响刚体的运动。
外推使用上一次物理更新中刚体的姿态和速度,并预测下一次物理更新中刚体的姿态,以计算和预测当前帧中的姿态。

Extrapolate 使刚体看起来略微领先于其应有的位置,并且可能略微不准确。这通常最适合精度不重要的情况;例如,如果刚体以恒定速度移动,并且没有其他物理元素影响刚体的移动。
碰撞检测定义物理系统如何检测此刚体的碰撞体与场景中的其他碰撞体之间的碰撞。Unity 为每对碰撞体生成一个碰撞,并根据此 Collision Detection 属性确定碰撞检测方法。

默认情况下,Collision Detection (重叠检测) 设置为 Discrete (离散)。有关每种冲突检测类型的更多信息,请参阅连续碰撞检测
.
离散物理系统使用 discrete碰撞
detection 来计算此刚体碰撞器的碰撞。如果此刚体不涉及任何快速移动的碰撞,请选择 Discreation离散 碰撞检测
不是很计算密集。
连续的物理系统使用基于扫描的 CCD 来计算此刚体的碰撞体与任何静态碰撞体(即没有关联刚体的碰撞体)之间的碰撞。如果此刚体涉及与静态碰撞体的快速移动碰撞,请选择 Continuous。基于扫描的 CCD 比 Discrete 或 Continuous Speculative 的计算密集度更高。
连续动态物理系统使用基于扫描的 CCD 来计算此刚体的碰撞体与所有其他碰撞体之间的碰撞,但设置为 Discrete collision detection (离散碰撞检测的碰撞体除外)。如果此刚体涉及与任何碰撞体的快速移动碰撞,请选择 Continuous Dynamic。基于扫描的 CCD 比 Discrete 或 Continuous Speculative 的计算密集度更高。
持续投机物理系统使用推测性连续碰撞检测
来计算此刚体的碰撞体与所有其他碰撞体之间的碰撞。如果碰撞精度对于此刚体不重要,请选择 Continuous Specative。推测性碰撞检测的计算量比 Discrete 高,但比 Continuous 或 Continuous Dynamic 的计算量低。
约束对刚体的移动施加限制。
冻结位置选择性地停止刚体在世界 X、Y 和 Z 轴上移动。
冻结旋转有选择地停止刚体围绕局部 X、Y 和 Z 轴旋转。

在 Unity 中,刚体(Rigidbody)是用于模拟物理效果的重要组件。

A、刚体的基本概念

  1. 定义:刚体是一种物理对象,它在物理模拟中具有一定的质量、形状和运动属性,并且遵循牛顿力学定律。在 Unity 中,刚体组件可以添加到游戏对象上,使其能够受到重力、碰撞和其他物理力的影响。
  2. 作用:刚体组件使得游戏对象能够在物理世界中进行真实的运动和交互。它可以模拟物体的运动、碰撞、反弹等物理现象,为游戏增加真实感和趣味性。

B、刚体的主要属性

  1. Mass(质量):
    • 定义了刚体的质量大小。质量越大,物体受到的重力和惯性就越大。
    • 质量的单位是千克(kg)。可以根据实际需求调整物体的质量,以实现不同的物理效果。
  2. Drag(阻力):
    • 决定了刚体在运动过程中受到的空气阻力大小。阻力越大,物体运动的速度就会越快地减慢。
    • 阻力的单位是牛顿秒每米(N・s/m)。可以根据物体的运动速度和环境来调整阻力值,以模拟不同的运动情况。
  3. Angular Drag(角阻力):
    • 控制刚体旋转时受到的阻力大小。角阻力越大,物体旋转的速度就会越快地减慢。
    • 角阻力的单位也是牛顿秒每米(N・s/m)。可以根据物体的旋转速度和需求来调整角阻力值。
  4. Use Gravity(使用重力):
    • 一个布尔值选项,决定刚体是否受到重力的影响。如果勾选该选项,刚体将受到 Unity 中预设的重力作用。
    • 默认情况下,Use Gravity 选项是勾选的,这意味着大多数物体都会受到重力影响而向下掉落。
  5. Is Kinematic(是否为运动学刚体):
    • 一个布尔值选项,用于将刚体设置为运动学刚体或普通刚体。
    • 如果勾选 Is Kinematic 选项,刚体将不受物理引擎的影响,而是通过脚本或动画来控制其运动。运动学刚体通常用于与其他刚体进行碰撞检测,但不参与物理模拟。
    • 如果不勾选 Is Kinematic 选项,刚体将受到物理引擎的控制,遵循牛顿力学定律进行运动。

C、刚体的常见方法

  1. AddForce(施加力):
    • 用于向刚体施加一个力,使其产生加速度并开始运动。
    • 可以通过指定力的大小和方向来控制刚体的运动。例如,可以使用 AddForce (Vector3.forward * 10) 向刚体施加一个向前的力,使其向前加速运动。
  2. AddTorque(施加扭矩):
    • 向刚体施加一个扭矩,使其产生旋转加速度并开始旋转。
    • 可以通过指定扭矩的大小和方向来控制刚体的旋转。例如,可以使用 AddTorque (Vector3.up * 10) 向刚体施加一个向上的扭矩,使其绕 y 轴旋转。
  3. Sleep(使刚体休眠):
    • 当刚体处于静止状态时,可以使用 Sleep 方法将其设置为休眠状态,以减少物理计算的开销。
    • 休眠的刚体将不会参与物理模拟,直到受到外力作用或被唤醒。可以使用 WakeUp 方法唤醒休眠的刚体。
  4. IsSleeping(判断刚体是否处于休眠状态):
    • 返回一个布尔值,表示刚体是否处于休眠状态。
    • 可以在脚本中使用这个方法来检查刚体的状态,并根据需要进行相应的处理。

D、刚体的碰撞检测

  1. Collider(碰撞器):
    • 刚体通常需要与碰撞器组件一起使用,才能实现碰撞检测。碰撞器定义了物体的形状和大小,用于检测物体之间的碰撞。
    • Unity 提供了多种类型的碰撞器,如 Box Collider(盒子碰撞器)、Sphere Collider(球体碰撞器)、Capsule Collider(胶囊碰撞器)等。可以根据物体的形状选择合适的碰撞器类型。
  2. OnCollisionEnter(碰撞开始事件):
    • 当刚体与其他物体发生碰撞时,会触发 OnCollisionEnter 事件。可以在脚本中重写这个方法来处理碰撞事件。
    • 例如,可以在 OnCollisionEnter 方法中播放碰撞音效、减少物体的生命值等。
  3. OnTriggerEnter(触发开始事件):
    • 当刚体进入一个触发器区域时,会触发 OnTriggerEnter 事件。触发器是一种特殊的碰撞器,它不会产生物理碰撞效果,而是用于检测物体的进入和离开。
    • 可以在脚本中重写 OnTriggerEnter 方法来处理触发事件。例如,可以在触发器区域中触发剧情、打开门等。

E、刚体的应用场景

  1. 游戏角色控制:
    • 可以使用刚体来模拟游戏角色的运动和碰撞。通过施加力和扭矩,可以控制角色的移动、跳跃和攻击等动作。
    • 结合动画和物理效果,可以使角色的动作更加真实和自然。
  2. 物体交互:
    • 刚体可以用于模拟物体之间的交互,如推箱子、碰撞球等游戏。通过检测碰撞和施加力,可以实现物体的移动、碰撞和反弹等效果。
  3. 物理模拟:
    • 在一些模拟类游戏中,刚体可以用于模拟真实的物理现象,如重力、摩擦力、弹性等。通过调整刚体的属性和碰撞器,可以实现不同的物理效果。

三.扩展

Constant Force 将恒定力添加到刚体这适用于游戏对象随时间加速的运动。

名称:功能:
定义线性力的方向。XYZ 向量引用现场
的全局轴。
相对力定义线性力的方向。XYZ 矢量是指刚体的局部轴。
力矩定义刚体旋转的全局轴。
相对扭矩

定义刚体旋转的局部轴。

这篇关于Unity(2022.3.41LTS) - 角色控制器和3D刚体的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX

简单的角色响应鼠标而移动

actor类 //处理移动距离,核心是找到角色坐标在世界坐标的向量的投影(x,y,z),然后在世界坐标中合成,此CC是在地面行走,所以Y轴投影始终置为0; using UnityEngine; using System.Collections; public class actor : MonoBehaviour { public float speed=0.1f; CharacterCo

SAM2POINT:以zero-shot且快速的方式将任何 3D 视频分割为视频

摘要 我们介绍 SAM2POINT,这是一种采用 Segment Anything Model 2 (SAM 2) 进行零样本和快速 3D 分割的初步探索。 SAM2POINT 将任何 3D 数据解释为一系列多向视频,并利用 SAM 2 进行 3D 空间分割,无需进一步训练或 2D-3D 投影。 我们的框架支持各种提示类型,包括 3D 点、框和掩模,并且可以泛化到不同的场景,例如 3D 对象、室

Unity Post Process Unity后处理学习日志

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

jmeter之仅一次控制器

仅一次控制器作用: 不管线程组设置多少次循环,它下面的组件都只会执行一次 Tips:很多情况下需要登录才能访问其他接口,比如:商品列表、添加商品到购物车、购物车列表等,在多场景下,登录只需要1次,我们期望的是重复执行登陆后面的接口来做压测,这就和事务相关,例如 事务1: 登录—>添加购物车 事务2: 登录—>购物车列表 事务3: 登录—>商品列表—>添加购物车 … 一、仅一次控制器案例 在

模具要不要建设3D打印中心

随着3D打印技术的日益成熟与广泛应用,模具企业迎来了自建3D打印中心的热潮。这一举措不仅为企业带来了前所未有的发展机遇,同时也伴随着一系列需要克服的挑战,如何看待企业引进增材制造,小编为您全面分析。 机遇篇: 加速产品创新:3D打印技术如同一把钥匙,为模具企业解锁了快速迭代产品设计的可能。企业能够迅速将创意转化为实体模型,缩短产品从设计到市场的周期,抢占市场先机。 强化定制化服务:面

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