Posts in Category: Unity3D

Unity 3D PHYSICS 3D物理引擎学习笔记 2

ADDING PHYSICS FORCES

AddForce方法用来给Rigidbody(刚体)增加外力

[code]
using UnityEngine;
using System.Collections;

public class HoverPad : MonoBehaviour
{
public float hoverForce;
void OnTriggerStay (Collider other)
{
other.rigidbody.AddForce(Vector3.up * hoverForce, ForceMode.Acceleration);
}
}
[/code]

ADDING PHYSICS TORQUE

用来给Rigidbody增加用于旋转的外力

PHYSICS MATERIALS

用来控制物体在碰撞发生时的摩擦力和弹性。

Dynamic Friction(动态摩擦)是用来设定物体移动产生的摩擦力。

Static Fiction(静态摩擦)是用来设定物体从静止状态移动一个物体所需要多少力量。

Bounciness(弹力)设定物体的弹力大小。

Friction Combine(综合摩擦)是用来设定物体对其它物体材质的反应。

Friction Direction(摩擦方向)设定各轴向的摩擦力。

Dynamic Friction 2(动态摩擦力2)和Static Friction 2(静态摩擦力2)用来控制摩擦方向的三个轴向数值。

物理材质可以在物体的碰撞器属性里面指定,在碰撞体元件里面会看到一项 Material 就是用来设定物理材质的。

Joint

基本关节系统

关节会讲物体所在一个世界坐标或者一个连接的刚体上。

Fixed Joint (固定关节)

Connected Body:所挂接在的物体。

Break Force:破坏关节所需要的最小力量。

Break Torque:破坏关节所需要的最大角度。

Spring Joint(弹簧关节)

Anchor(锚点)是关节的支点。

Spring(弹性)表示弹簧的韧度,数值越高代表弹簧越紧越坚固。

Damper(阻尼)设定挂捏动作放慢的速度,数值越高代表弹簧晃过头的机会越小。

Min Distance(最小距离)和Max Distance(最大距离)

Break Force:破坏关节所需要的最小力量。

Break Torque:破坏关节所需要的最大角度。

Hinge Joint(合页/铰链关节)适用于门这种物体。

合页于弹簧关节有些参数是相似的。它的轴就是旋转的轴向。

Axis(坐标轴)代表关节以哪个轴做支点。

 Motor(马达)马达设定让你的关节可以加上速度,就像旋转门一样,其中Target Velocity(目标速度)设定关节的旋转速度;Force(力量)是要达到目标速度的值;Free Spin(自由旋转)如果勾选了,则力量智慧用来帮关节加速而不会减速。

Limits(限制)是用来限制关节的动态,Min和Max用来设定关节移动的旋转角度,Min Bounce和Max Bounce(最大/最小回馈)用来设定当关节转到限制角度时所作的反应。

Raycasting

射线检测,用一条看不见的线来探测在这条线上是否与其它物体发生了碰撞。

 

Unity 3D PHYSICS 3D物理引擎学习笔记 1

1. Collider 碰撞体

Collider 有多种不同的形状,如果常规形状的 Collider 不能满足需求,一般有两种方法,一是用常规形状组合一个复杂形状;二是用 Mesh(网格),在使用Mesh时由于形状完全与对象一致,所以运算起来很复杂,这时可以用简化过的Mesh附加到对象上,这样级有利于复杂形状的碰撞计算,又不致于让运行太卡。

要发生碰撞,两个物体一定得有一个包含Rigidbody(刚体)。

2. Trigger 触发器

一旦在 Collider 中勾选了 Trigger,Collider 就不在有任何碰撞行为,必须由程序来控制。

生丁Trigger的标准做法是将Trigger设定为静态物体,这样它们就不会受物理引擎的影响。

用来做Trigger的碰撞体也被称作触发范围(Trigger Zone)。使用Trigger可以实现由程序来进行触发判断而不需要由物体产生实际的物理碰撞。

3. RigidBody 刚体

正常情况下,游戏里所有会动动物体都应该带有Rigidbody。刚体是让物体可以被物理所影响的元件。它带有物理属性,例如:Mass(质量)、阻力(Drag)、Angular Drag(旋转阻力)和Velocity(速度)。

刚体是触发所有物理行为的基本元件,除此之外该物体也必须有一个碰撞体才能与其它物理物体互动。

重力的设定是在菜单 Edit->Project Settings->Physics中,重力的设定是一三维的值,而Y轴的预设值时重力的实际值 -9.81。

Is Kinematic(运动体)决定物体是否会被物理行为影响。物理引擎一般只在场景初始化时检查一遍所有静态物体,如果静态物体位置发生了变化,物理引擎就必须要重新检查所有静态物体来保持物理的准确性,这样效能会大幅下降,要避免这样的问题,可以使用运动体,并透过Translate函数让运动体运动,这样物体就可以在不影响自己的情况下与其它物体产生物理行为。
简单的说,就是对该物体设置了Is Kinematic之后,每次通过translate移动该物体时,实际上该物体会主动向物理引擎汇报位置,从而提高整体的效能。

Interpolate (差值)像与它下拉列表中的Extrapolate(推算)是用来解决物体的不规则位移的,当使用刚体移动时,产生了些许的不规则位移,此时你可以设置使用Interpolate项,表示利用上一帧的位置来进行平滑的位移运算;Extrapolate则是预测下一帧的坐标位置来进行平滑的位移。

Collision Detection(碰撞侦测类型), 包括Discrete(非连续性)、Continuous(连续性)、Continuous Dynamic(动态连续性),一般情况下使用Discrete(非连续性);Continuous(连续性)时让快速移动的物体能和静态物体互动的设定;Continuous Dynamic(动态连续性)是让快速移动的物体能和其它动态物体互动。