Unity中很多对游戏对象的操作都是使用脚本来修改对象的Transform(变换属性)与Rigidbody(刚体属性)参数从而实现的。
private void Update()
{
this.transform.Rotate(90, 0, 0);//绕x轴旋转90度。正值表示顺时针,负值表示逆时针
}
注意这样的利用transform来实现物体运动的方法,一般有第四参数的重载用于确定变换的轴,
Space.World:相对于世界坐标系统进行旋转
Space.Self:相对于自身轴进行旋转
格式
public void MoveRotation(Quaternion rot);
Quaternion:四元角
描述:将刚体旋转到rotation。
使用Rigidbody.MoveRotation旋转刚体,符合刚体的插值设置。
如果在 Rigidbody 上启用了 Rigidbody 插值,则调用Rigidbody.MoveRotation将导致渲染的任何中间帧中的两个旋转之间的平滑过渡。如果您想在每个FixedUpdate中连续旋转刚体,则应使用此选项。
Rigidbody m_Rigidbody;
Vector3 m_EulerAngleVelocity;
void Start()
{
m_Rigidbody = GetComponent<Rigidbody>();
m_EulerAngleVelocity = new Vector3(0, 100, 0);
}
void FixedUpdate()
{
Quaternion deltaRotation = Quaternion.Euler(m_EulerAngleVelocity * Time.fixedDeltaTime);
m_Rigidbody.MoveRotation(m_Rigidbody.rotation * deltaRotation);
}
但是在大多数情况下,不应直接修改速度,因为这可能会导致不切实际的行为 ,要在每个物理步骤中设置对象的速度。
一个典型的用法是在第一人称射击游戏中跳跃时改变速度,因为你想要立即改变速度。
Rigidbody rig;
private void Update()
{
rig = this.gameObject.GetComponent<Rigidbody>();
rig.velocity = new Vector3(0, 0, 5);//每帧向y轴方向移动5个单位
}
描述:将运动学刚体移向postion
Rigidbody.MovePosition移动刚体并符合插值设置。启用刚体插值后,Rigidbody.MovePosition会在帧之间创建平滑过渡。Unity在每次调用中移动一个刚体。发生在世界空间中FixedUpdate。将刚体position从一个位置传送到另一个位置使用Rigidbody.position而不是MovePosition。
public class NewBehaviourScript : MonoBehaviour //声明类
{
Rigidbody rig;
public float speed = 5f;
private void Start()
{
rig = this.gameObject.GetComponent<Rigidbody>();
}
private void FixedUpdate()
{
Vector3 input = new Vector3(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"));
rig.MovePosition(transform.position + input * Time.deltaTime * speed);//从当前位置移动到新的位置,以每秒5单位的速度
}
}
格式
public void AddForce ( Vector3 force , ForceMode mode = ForceMode.Force);
描述:向刚体添加力
力沿force矢量方向连续施加。指定ForceMode mode允许将力的类型更改为 Acceleration、Impulse 或 Velocity Change。
ForceMode.Force:将输入解释为力
ForceMode.Acceleration:将参数解释为加速度
ForceMode.Impulse:将参数解释为脉冲
ForceMode.VelocityChange:将参数解释为直接的速度变化(以米/秒为单位),并通过力的值改变速度。
力只能应用于活动刚体。如果 GameObject 处于非活动状态,则 AddForce 无效。此外,刚体不能是运动学的。
默认情况下,一旦施加力,刚体的状态设置为唤醒,除非力为Vector3.zero。
Rigidbody rig;
public float force = 50f;
private void Start()
{
rig = this.gameObject.GetComponent<Rigidbody>();
}
private void FixedUpdate()
{
if (Input.GetButton("Jump"))
{
rig.AddForce(transform.up * force);//向上添加一个50牛的力
}
}
private void Update()
{
transform.position = new Vector3(0, 0, 10);//向z轴移动10个单位
}
private void Update()
{
transform.Translate(0, 0, 5,Space.Self);//物体每一帧向z轴方向移动5个单位。
}
如果一个游戏物体有刚体就需要使用刚体的移动组件。
同时刚体每一帧调用方法使用FixedUpdate