Unity3D剛體常用方法介紹(十一)

本節(jié)要點(diǎn)

#1.AddForce()

1.作用

給剛體添加一個(gè)力,讓剛體按“世界坐標(biāo)系”進(jìn)行運(yùn)動(dòng)。

2.代碼

Rigidbody.AddForce(Vector3,F(xiàn)orceMode);

Vector3:力的方向和大小;

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

3.ForceMode 參數(shù)

類型為枚舉類型,以什么樣的方式添加力給剛體。
枚舉值說(shuō)明

Acceleration:[?k?sel??re??n](加速度);

Force:(力)這種模式通常用于設(shè)置真實(shí)的物理;

Impulse:(沖擊力)這種模式通常用于瞬間發(fā)生的力;

VelocityChange:(速度的變化);

#2.AddRelativeForce()

1.作用

給剛體添加一個(gè)力,讓剛體按“自身坐標(biāo)系”進(jìn)行運(yùn)動(dòng)。

2.代碼

Rigidbody.AddRelativeForce(Vector3,F(xiàn)orceMode);

Vector3:力的方向和大小;

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


3.FixedUpdate()

固定更新方法。

所有和物理相關(guān)的操作,代碼都要寫在 FixedUpdate()方法體內(nèi)。

固定更新的時(shí)間間隔是 0.02 秒,1 秒執(zhí)行 50 次。

Edit-->Project Settings-->Time 面板中的 Fixed Timestep 參數(shù)設(shè)置。
Update()方法是每幀執(zhí)行一次。

畫面每渲染完一次,就是一幀,每幀的時(shí)間是不固定的。

在 Update()方法中執(zhí)行物理操作,會(huì)出現(xiàn)卡頓的情況。


場(chǎng)景視圖

關(guān)鍵代碼

ForceTest

public class ForceTest : MonoBehaviour {



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

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

        //給Z鍵添加一個(gè)自身向前的力

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

    //物理更新方法 執(zhí)行物理操作;
    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<Rigidbody>();
        m_Tranform=gameObject.GetComponent<Transform>();
        //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);
        }




    
    }
}

小結(jié)

瘋狂的小鳥.jpg
剛體添加力.png
Unity API.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容