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

本節(jié)要點

#1.AddForce()

1.作用

給剛體添加一個力,讓剛體按“世界坐標系”進行運動。

2.代碼

Rigidbody.AddForce(Vector3,ForceMode);

Vector3:力的方向和大??;

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

3.ForceMode 參數

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

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

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

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

VelocityChange:(速度的變化);

#2.AddRelativeForce()

1.作用

給剛體添加一個力,讓剛體按“自身坐標系”進行運動。

2.代碼

Rigidbody.AddRelativeForce(Vector3,ForceMode);

Vector3:力的方向和大小;

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


3.FixedUpdate()

固定更新方法。

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

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

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

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

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


場景視圖

關鍵代碼

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);//世界坐標系向前力
       // m_Rigibody.AddRelativeForce(Vector3.forward * 10, ForceMode.Force);//自身坐標系向前力
    

        //給Z鍵添加一個自身向前的力

        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);
        }




    
    }
}

小結

瘋狂的小鳥.jpg
剛體添加力.png
Unity API.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容