UNITY物理系统[Colliders]

UNITY_Colliders

照常推荐Unity官方文档

本篇文章是介绍在游戏开发过程中,常用的物理组件(Box Collider,Rigidbody等)介绍一些基本的作用,和一些需要规避的地方。

Box Collider

Box Collider形状类似于箱子,所以也经常使用在地板,墙壁,坡道上;也是组合碰撞器用的最多的一种。

属性 功能
Is Trigger 如果启用,此碰撞器用于触发事件,并被物理引擎忽略。
Material 物理材料,确定与他们互动的方式
Center 碰撞器在物体空间种的位置
Size 碰撞器尺寸的大小

Capsule Collider

胶囊形碰撞器实际上是通过一个圆柱连接的两个球体,可以通过HeightRadius调节我们需要的形状。

属性 功能
Radius 碰撞器的半径
Height 碰撞器的高度
Direction 胶囊体纵方向的轴

Mesh Collider

网格碰撞器需要一个网格,会根据这个网格来创建碰撞器。该碰撞器的碰撞检测会比其他的碰撞器更加准确,标记Convex也会与其他碰撞器发生碰撞。

属性

属性 功能
Convex 勾选之后会启动Convex, 此网格碰撞器可以与其他碰撞器发生碰撞

注意

网格碰撞器会更好的契合模型的形状,可以得到更加精准的碰撞,同时性能的消耗也是需要注意的地方;慎用,如果只能使用Mesh Collider,那么我们可以在Import Settings 中禁用 Normals 物理系统不需要。

Mesh Collider限制:

  • 没有Rigidbody组件的物体上仅支持不勾选Convex的mesh collider,如果要应用刚体请勾选。
  • 在某些情况,为了Mesh Collider正常工作,需要勾选Import Settings中的Read/Write Enable。 这些情况包括:
    • 负比例缩放(-1,1,1)
    • 剪切变换

Sphere Collider

球形碰撞器常用语球状物体。

可以通过半径来调整大小,除了应用与球状物体,还可以应用于掉落的巨石和其他需要滚动的物体。

Wheel Collider

轮胎形碰撞器主要应用于车辆。它具有内置的碰撞检测,车轮物理学和基于滑动的轮胎摩擦模型。

属性

属性 功能
Mass 质量
Radius 半径
Wheel Damping Rate 施加在轮胎上的阻力值
Suspension Distance 车轮悬架的最大伸展距离;悬架总是通过Y轴向下延伸
Force App Point Distance 这个参数定义了车轮力的施加点。这预计在离悬架行驶方向的静止位置处的车轮基部以米计。当forceAppPointDistance = 0这些力量在轮子基地静止时被施加。一个更好的车辆将有轻微低于车辆重心的力量。
Center 车轮中心
Suspension Spring 悬架试图通过增加弹簧和阻尼力来达到Target Position
Spring 更大的值使悬架更快地到达目标位置
Damper 减缓悬架速度。数值越大,悬架弹簧的移动速度越慢
Target Position 悬架的距离沿悬架距离。1映射到完全扩展的悬架,0映射到完全压缩的悬架。默认值是0.5,这与普通汽车的暂停行为相匹配。
Forward/Sideways Friction 当车轮向前和侧向滚动时的轮胎摩擦特性

注意

轮子的碰撞检测是通过从中心向下投射通过局部Y轴的光线来执行的。车轮有一个半径,可以根据悬架距离向下延伸。车辆通过使用不同属性的脚本进行控制:motorTorque,brakeTorque和steerAngle。

轮对撞机使用基于滑动的摩擦模型来与其他物理引擎分开计算摩擦。这允许更真实的行为,但也会导致车轮碰撞器忽略标准的物理材料设置。

转动轮胎的时候最好不要转动碰撞器,而是找到一个与碰撞器分开的物体来模拟车轮的转动。

Terrain Collider

属性

属性 功能
Terrain Data 地形数据
Enable Tree Colliders 树木的碰撞器将会启用


本作品由繁星陨辰采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。

时间: 2024-10-10 22:13:13

UNITY物理系统[Colliders]的相关文章

UNITY物理系统简介

UNITY_物理系统简单介绍 要有说服力的物理行为,游戏中的物体必须正确地加速,受到碰撞,引力和其他力量的影响. Unity中实际上有两个独立的物理引擎:一个用于3D物理,另一个用于2D物理.两个引擎的主要概念是相同的(除了3D中的额外维度),但是它们是使用不同的组件实现的.例如,Rigidbody和Rigidbody2D. 笔者推荐阅读UNITY官方手册 物理概述 Rigidbody(刚体) 概述 在使用Unity中如果想要GO拥有重力,可以发生碰撞反馈等,那就必不可少需要添加一个组件Rigi

全面理解 Unity UI 系统

[狗刨学习网] 随着 Unity 4.6 发布,新 UI 系统终于与大家见面了. RectTransform Unity UI 系统使用 RectTransform 实现基本的布局和层次控制.RectTransform 继承于 Transform,所以 Transform 的所有特征 RectTransform 同样拥有.在 Transform 基础上,RectTransform 增加了 轴心(pivot).锚点(实际上是用 anchorMin.anchorMax 两个点定义的矩形区域).和 尺

如何做物理系统的同步

1.如果不需要防作弊,那么就信任所有的客户端数据,这样直接在客户端机器上运行物理系统即可,不需要服务器参与计算,直接就节省了服务器的负载.这样做的方法是,挑选一个客户端作为主机或者找一种方式来解决玩家之间运算不一致的情况.如果需要物理运算是基于多个玩家机器,那么就需要多对多的同步,涉及到更多的通信量. 2.如果需要服务器去做真实的校验,那么肯定就需要服务器去做真实的物理运算.最简单的方式是在服务器端跑一个unity客户端,服务器依赖这个客户端的运算结果.要不就在服务器端跑一个物理系统来做真实运算

Unity 物理引擎实现匀速圆周运动

摘要 本文主要讲述如何利用Unity物理引擎实现匀速圆周运动. 前言 首先,我们可以利用Unity API,Transform.RotateAround来实现匀速圆周运动.但是这个实现,我觉得不过瘾,因为你只是了解一个API,并没有学到任何其他的知识.接下讲一点有意思东西. 物理知识 1.定义: 质点沿圆周运动,如果在任意相等的时间里通过的圆弧长度都相等,这种运动就叫做"匀速圆周运动",亦称"匀速率圆周运动".因为物体作圆周运动时速率不变,但速度方向随时发生变化.所

【Unity编程】Unity动画系统(一)

Unity动画系统 Unity动画系统,也称为"Mecanim",提供了以下功能: 简单的工作流程,设置动画的所有元素,包括对象,角色和属性. 支持导入外部创建的动画片段和使用内置动画编辑器制作的动画片段. 人型动画重新定位,动画角色的运动控制可以被所有的角色模型共享,即角色的外观(SkinedMesh)和运动(Animator)是分离的,它们互相组合之后形成最终的动画. 用于编辑动画状态的的简化工作流程,即动画控制器. 方便预览动画片段,以及片段之间的插值过渡. 这使得动画师可以独立

DX10引擎计划0322——物理系统

这部分的知识实在是琐碎,涉及到了立体几何.数学.物理等方面许多内容,当然计算机方面的基础知识更重要. 感觉做东西越是用的心思多,越是没话说.这一部分真心不是菜鸟玩的转的.我就把自己写的碰撞检测函数和重力模仿框架帖一下.筒子们可以直接拿去用.但我更希望更多的初学者能好好看看代码中的核心思想. 想了好几天是在是想不出来怎么讲这一章怎么完成的,要是写的话把我累死了就.就写一下关于这部分的一些个人总结吧: 1.游戏编程最重要的是数据结构和算法,以及底层知识,计组.操作系统是必修课.这个不是我乱说的,我接

1.物理系统PhysicsWorld,RayCast

 1 3.0物理系统PhysicsWorld T07PhysicsWorld.h #ifndef __T07PhysicsWorld_H__ #define __T07PhysicsWorld_H__ #include "T32.h" class T07PhysicsWorld : public Layer { public: CREATE_FUNC(T07PhysicsWorld); bool init(); Scene* getScene(){ return (Scene*)g

Cocos2d-x v3.0物理系统 利用PhysicsEditor创建多边形

Cocos2d-x 3.0的新物理系统我就不必多说了,接触一段时间,感觉还是不错的.对于那些基本概念,网上的教程已经泛滥了,就不多说了,不过对于创建多边形物体的教程,还真不多,很多都是创建圆形和矩形,这两个很简单,传入图片的大小数据基本就可以搞定了.多边形的麻烦之处在于每个点的位置,Mac下有VertexHelper可以很轻松获取到多边形的每个点,然后创建出来,但Windows下,呃,确实我没找到什么好的工具,PhysicsEditor在以前使用Box2d原生的代码创建多边形还是挺好用的,现在就

Unity脚本系统

什么是脚本?脚本是一个 MonoBehavior, 继承关系是 MonoBehavior -> Behavior -> Component -> Object GameObject 的行为是由附加到他们身上的组件控制的. 游戏事件 MonoBehavior 类名和脚本名必须要一样 public class MainPlayer : MonoBehaviour { public string myName; // Use this for initialization void Start