Unity3D刚体常用方法介绍(十一)

本节要点

#1.AddForce()

1.作用

给刚体添加一个力,让刚体按“世界坐标系”进行运动。

2.代码

Rigidbody.AddForce(Vector3,ForceMode);

Vector3:力的方向和大小;

ForceMode:力的模式[enum 类型]。

3.ForceMode 参数

类型为枚举类型,以什么样的方式添加力给刚体。
枚举值说明

Acceleration:[əkˌseləˈreɪʃn](加速度);

Force:(力)这种模式通常用于设置真实的物理;

Impulse:(冲击力)这种模式通常用于瞬间发生的力;

VelocityChange:(速度的变化);

#2.AddRelativeForce()

1.作用

给刚体添加一个力,让刚体按“自身坐标系”进行运动。

2.代码

Rigidbody.AddRelativeForce(Vector3,ForceMode);

Vector3:力的方向和大小;

ForceMode:力的模式[enum 类型]。


3.FixedUpdate()

固定更新方法。

所有和物理相关的操作,代码都要写在 FixedUpdate()方法体内。

固定更新的时间间隔是 0.02 秒,1 秒执行 50 次。

Edit-->Project Settings-->Time 面板中的 Fixed Timestep 参数设置。
Update()方法是每帧执行一次。

画面每渲染完一次,就是一帧,每帧的时间是不固定的。

在 Update()方法中执行物理操作,会出现卡顿的情况。


场景视图

Unity3D刚体常用方法介绍(十一)_第1张图片

关键代码

ForceTest

public class ForceTest : MonoBehaviour {



    private Rigidbody m_Rigibody;
    // Use this for initialization
    void Start () {
    
        m_Rigibody=gameObject.GetComponent();
    }
    
    // Update is called once per frame
    void Update () {

        //m_Rigibody.AddForce(Vector3.forward, ForceMode.Force);//世界坐标系向前力
       // m_Rigibody.AddRelativeForce(Vector3.forward * 10, ForceMode.Force);//自身坐标系向前力
    

        //给Z键添加一个自身向前的力

        if (Input.GetKeyDown(KeyCode.Z))
        {
            m_Rigibody.AddRelativeForce(Vector3.forward * 10, ForceMode.Force);
        } 
    
    }

    //物理更新方法 执行物理操作;
    void FixUpDate() { 
    
    }
}

RigidbodyMove

public class RigidbodyMove: MonoBehaviour {


    private Rigidbody m_Rigidbody;
    private Transform m_Tranform;
    // Use this for initialization
    void Start () {
        m_Rigidbody=gameObject.GetComponent();
        m_Tranform=gameObject.GetComponent();
        //Test
       // m_Rigidbody.MovePosition(m_Tranform.position+ Vector3.forward*10);
    
    }
    
    // Update is called once per frame
    void Update () {
        //向前
        if (Input.GetKey(KeyCode.W))
        {
            m_Rigidbody.MovePosition(m_Tranform.position+Vector3.forward*0.1f);
        }

        if (Input.GetKey(KeyCode.S))
        {
            m_Rigidbody.MovePosition(m_Tranform.position + Vector3.back * 0.1f);
        }



        if (Input.GetKey(KeyCode.A))
        {
            m_Rigidbody.MovePosition(m_Tranform.position + Vector3.left * 0.1f);
        }


        if (Input.GetKey(KeyCode.D))
        {
            m_Rigidbody.MovePosition(m_Tranform.position + Vector3.right * 0.1f);
        }




    
    }
}

小结

Unity3D刚体常用方法介绍(十一)_第2张图片
疯狂的小鸟.jpg
刚体添加力.png
Unity3D刚体常用方法介绍(十一)_第3张图片
Unity API.png

你可能感兴趣的:(Unity3D刚体常用方法介绍(十一))