Rigidbody

刚体

通过物理模拟控制一个物体的位置。

Rigidbody组件控制物体的位置 - 它使物体在重力影响下下落,并可计算物体将怎样响应碰撞。

当操作刚体参数的时候,你应该在FixedUpdate函数中使用它,物理模拟以离散的时间步执行。FixedUpdate函数在每一步之前被立即调用。

使用刚体需要注意的事:

如果你的模拟看起来像慢动作并且不真实: 这是缩放的问题。如果你的游戏世界非常大,所以的东西将显示移动非常慢,确保你所有的模型为真实世界大小。例如,一个汽车应该有4米长,一个角色约2米高。物体以相同的加速度下落,不论大或小,重或轻。如果你的游戏世界有较大的缩放,物体仍以相同的加速度下落,但是因为所有的物体都比较大,物体的下落显得就比较慢。

Variables 变量
velocity 刚体的速度向量
angularVelocity 刚体的角速度向量
drag 物体的阻力
angularDrag 物体的角阻力
mass 刚体的质量
useGravity 控制重力是否影响整个刚体
isKinematic 控制物理学是否够影响这个刚体
freezeRotation 控制物理是否改变物体的旋转
collisionDetectionMode 刚体的碰撞检测模式
centerOfMass 相对于变换原点的质量中心
worldCenterOfMass 在世界坐标空间的刚体的质量中心。(只读)
inertiaTensorRotation 惯性张量的旋转
inertiaTensor 相对于重心的质量的惯性张量对角线
detectCollisions 碰撞检测应否启用?(默认总是启用的)
useConeFriction 用于该刚体的锥形摩擦力
position 该刚体的位置
rotation 该刚体的旋转
interpolation 插值允许你以固定的帧率平滑物理运行效果
solverIterationCount 允许你覆盖每个刚体的求解迭代次数
sleepVelocity 线性速度,低于该值的物体将开始休眠。(默认0.14)范围{0, infinity}
sleepAngularVelocity 角速度,低于该值的物体将开始休眠。(默认0.14)范围{0, infinity}
maxAngularVelocity 刚体的最大角速度,(默认7)范围{0, infinity}
Functions 函数
SetDensity 基于附加的碰撞器假设一个固定的密度设置质量
AddForce 添加一个力到刚体。作为结果刚体将开始移动
AddRelativeForce 添加一个力到刚体。相对于它的系统坐标
AddTorque 添加一个力矩到刚体
AddRelativeTorque 添加一个力矩到刚体,相对于刚体自身的坐标系统
AddForceAtPosition 在position位置应用force力。作为结果这个将在这个物体上应用一个力矩和力
AddExplosionForce 应用一个力到刚体来模拟爆炸效果。爆炸力将随着到刚体的距离线形衰减
ClosestPointOnBounds 到附加的碰撞器边界框上的最近点
GetRelativePointVelocity 相对于刚体在relativePoint点的速度
GetPointVelocity 刚体在世界坐标空间中worldPoint点的速度
MovePosition 移动刚体到position
MoveRotation 旋转刚体到rot
Sleep 强制一个刚体休眠至少一帧
IsSleeping 刚体在休眠么?
WakeUp 强制唤醒一个刚体
SweepTest 如果一个刚体碰到任何东西触发测试,如果它是穿过场景
SweepTestAll 像Rigidbody.SweepTest,但是返回所有碰撞点
Messages Sent 发送消息
OnCollisionEnter 当这个collider/rigidbody已经开始接触另一个rigidbody/collider时,OnCollisionEnter被调用
OnCollisionExit 当这个collider/rigidbody停止接触另一个rigidbody/collider时,OnCollisionExit被调用
OnCollisionStay 对于每个collider/rigidbody接触另一个rigidbody/collider时,OnCollisionStay每帧被调用一次

Rigidbody.position

这个类似设置transform.position,然而position只在物理步结束应用到变换。 如果你想连续移动一个刚体或运动学刚体,使用MovePosition和MoveRotation代替。

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    void Start() {
        rigidbody.position = Vector3.zero;
    }
}

Rigidbody.MovePosition

移动刚体到position。

对于运动学刚体,它基于刚体的运动应用摩擦力。这个让你模拟刚体位于移动平台之上的情况。如果你想其他的刚体与运动学刚体交互,你需要在FixedUpdate函数中移动它。

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    private Vector3 speed = new Vector3(3, 0, 0);
    void FixedUpdate() {
        rigidbody.MovePosition(rigidbody.position + speed * Time.deltaTime);
    }
}

Rigidbody.rotation

该刚体的旋转。

这个类似设置transform.rotation,然而rotation只在物理步结束应用到变换。 如果你想连续移动一个刚体或运动学刚体,使用MovePosition和MoveRotation代替。

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    void Start() {
        rigidbody.rotation = Quaternion.identity;
    }
}

Rigidbody.MoveRotation

旋转刚体到rot

对于运动学刚体,它基于刚体的运动应用摩擦力。这个让你模拟刚体位于移动/旋转平台之上的情况。如果你想其他的刚体与运动学刚体交互,你需要在FixedUpdate函数中移动它。

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public Vector3 eulerAngleVelocity = new Vector3(0, 100, 0);
    void FixedUpdate() {
        Quaternion deltaRotation = Quaternion.Euler(eulerAngleVelocity * Time.deltaTime);
        rigidbody.MoveRotation(rigidbody.rotation * deltaRotation);
    }
}

Rigidbody.AddForce

添加一个力到刚体。作为结果刚体将开始移动。

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    void FixedUpdate() {
        rigidbody.AddForce(Vector3.up * 10);
    }
}

添加一个力到刚体。作为结果刚体将开始移动。

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    void FixedUpdate() {
        rigidbody.AddForce(0, 10, 0);
    }
}

如果你想在多帧中应用力,你应该在FixedUpdate中而不是Update使用使用它。

results matching ""

    No results matching ""