Unity API Rigidbody刚体的使用

刚体组件中position和MovePosition控制移动

Rigidbody.position

将刚体从一个位置直接设置到另外一个位置用此方法。

刚体的位置。

Rigidbodyposition允许您使用物理引擎获取和设置刚体的位置。如果你用刚体来改变一个刚体的位置。position转换将在下一步物理模拟步骤后更新。

这比使用Transform转换更新位置要快。因为Transform将导致所有附加的碰撞器重新计算它们相对于刚体的位置。

如果你想连续移动刚体,可以使用MovePosition,它会考虑到插值。

public class API15RigidbodyPosition : MonoBehaviour {
    public Rigidbody playerRgd;//刚体    
    void Update()
    {
        //当前位置+前方向*1秒*10
        playerRgd.position = playerRgd.transform.position + Vector3.forward * Time.deltaTime * 10;
	}
}

Rigidbody.MovePosition

public void MovePosition(Vector3 position); //持续的移动刚体用此方法。

将刚体插值移动到指定位置。

使用Rigidbody。根据刚体的插值设置移动刚体。

如果Rigidbody上启用了Rigidbody插值,则调用RigidbodyMovePosition在任何呈现的中间帧中都可以实现两个位置之间的平滑过渡。

如果您希望在每个FixedUpdate中连续移动一个rigidbody,那么应该使用这个方法。

设置Rigidbody。相反,如果你想要传送刚体从一个位置到另一个位置,没有中间位置被渲染。

public class API15RigidbodyPosition : MonoBehaviour {
    public Rigidbody playerRgd;//刚体    
    void Update()
    {
        //当前位置+前方向*1秒*10
        playerRgd.MovePosition(playerRgd.transform.position + Vector3.forward * Time.deltaTime * 10);
    }
}

Rigidbody.freezeRotation

控制物理是否会改变物体的旋转。

如果启用了自由旋转,则物理模拟不会修改旋转。这对于创造第一人称射击游戏很有用,因为玩家需要完全控制鼠标的旋转。参见:Rigidbody.constraints。

锁定x和z的旋转,只让y轴进行旋转

Unity API Rigidbody刚体的使用_第1张图片

通过刚体控制游戏物体旋转

Rigidbody.rotation

将刚体从一个角度直接旋转到另外一个角度用此方法。

刚体的旋转。

Rigidbodyrotation允许你使用物理引擎获得和设置刚体的旋转。如果你用刚体改变刚体的旋转。旋转时,变换将在下一步物理模拟步骤后更新。

这比使用Transform更新旋转要快,因为Transform将导致所有附加的碰撞体重新计算它们相对于刚体的旋转。

如果你想要连续地旋转刚体,可以使用MoveRotation,它会考虑到插值。

注意:旋转是世界空间。

Rigidbody.MoveRotation

public void MoveRotation(Quaternion rot); //持续旋转刚体用此方法。

使用Rigidbody使用插值运算旋转刚体

如果Rigidbody上启用了Rigidbody插值,则调用Rigidbody。在任何呈现的中间帧中,移动将导致两个旋转之间的平稳过渡。

如果你想要在每个FixedUpdate中连续旋转一个刚体,就应该使用这个方法。

设置Rigidbody。相反,如果你想要传送刚体从一个旋转到另一个旋转,没有中间位置被渲染。

public class API15RigidbodyPosition : MonoBehaviour {
    public Rigidbody playerRgd;//刚体
    public Transform enemy;//朝向的目标    
    void Update()
    {
        if (Input.GetKey(KeyCode.Space))
        {
            Vector3 dir = enemy.position - playerRgd.position;//刚体朝向目标
            dir.y = 0;//只需要x和z望向敌人,不需要y轴望向敌人,否则会发生倾斜
            Quaternion target = Quaternion.LookRotation(dir);//把望向敌人的向量转换为四元数
            playerRgd.MoveRotation(Quaternion.Lerp(playerRgd.rotation, target, Time.deltaTime)); //使用插值运算旋转
        }
    }
}

 通过AddForce控制运动

给刚体施加一个力

public void AddForce(Vector3 force, ForceMode mode = ForceMode.Force);

public class API15RigidbodyPosition : MonoBehaviour {
    public Rigidbody playerRgd;//刚体   
    public int force;//力度	
    void Update()
    {
        //会由慢变快进行加速度一直到稳定
        //力度如果太小会跑不起来
        playerRgd.AddForce(Vector3.forward * force);//力的方向*力度        
    }
}

 通过AddTorque控制旋转

public void AddTorque (Vector3 torque, ForceMode mode= ForceMode.Force);

public class ExampleClass : MonoBehaviour
{
    public float torque;
    public Rigidbody rb;

    void Start()
    {
        rb = GetComponent();
    }

    void FixedUpdate()
    {
        float turn = Input.GetAxis("Horizontal");
        rb.AddTorque(transform.up * torque * turn);//参数是一个float
    }
}

 

你可能感兴趣的:(UnityApi)