Unity3D_(物理引擎)Rigidbody組件


 

  

  Rigidbody組件剛體(Rigidbody)是Unity物理引擎中的重要組件,一個游戲對象添加了剛體組件以后就開始接受物理力學的影響了,比如重力、空氣摩擦力、碰撞產生的推力

 

Learn

  相同高度不同重量物體下落時間

    相同重量不同空氣阻力對物體的影響

  碰撞相關的三個事件

  觸發器相關的三個事件

  

 

  創建一個場景Gary,新建四個Cube,一個作為地面,另外三個作為測試方塊

  給Cube添加材質球(材質Material)  

  三個測試方塊后改名  A、B、C

 

 

 

  給Cube添加Rigidbody組件

  

 

  Mass:質量

  Drag:空氣阻力

  Angular Drag:角阻力

  Use Gravity:使用重力

  Is Kinematic:是否使用動力學

  Interpolate:插值

  Collision Detection:碰撞檢測

  Constraints:約束

 

 

相同高度不同重量物體下落時間

 

  修改A、B、C物體Mass的值

  A:Mass修改為10

  B:Mass修改為50

  C:Mass修改為100

 

 

  結論:不同質量的物體從同一高度自由落體至地面,到達地面的時間相同,最后的速度相同,但動能不相同,

 

 

 

相同重量不同空氣阻力對物體的影響

 

  保持A、B、C物體Mass的值相同(10),修改其Drag(空氣阻力)的值

  A:Drag修改為1

  B:Drag修改為10

  C:Drag修改為50

 

 

  結論:相同重量物體,空氣阻力越小物體下落快,當物體重量和空氣阻力相同時物體會保持下落,當物體重量小於空氣阻力時,物體保持不動

  (當我把B物體空氣阻力改為45時B物體還會保持下落,改為48時,B物體只會下滑0.0033高度,C物體空氣阻力為50時在空中y軸值保持不變)

  

 

給A物體添加一個RigidTest.cs腳本

 

  AddForce()施加力

  AddTorque()施加力矩

  AddForceAtPosition()在指定位置施加力

  //AddExplosionForce()施加爆炸力

 

(測試時建議將A物體重力設置低一些,按1給物體施加力,按2給物體施加力矩,按3在指定位置給物體施加力)

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RightText : MonoBehaviour {

    private Rigidbody r;
    // Use this for initialization
    void Start()
    {
        r = GetComponent<Rigidbody>();
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKey(KeyCode.Alpha1))
        {
            //施加力
            r.AddForce(new Vector3(0f, 10f, 0f));
        }
        if (Input.GetKey(KeyCode.Alpha2))
        {
            //施加力矩
            r.AddTorque(new Vector3(0f, 10f, 0f));
        }
        if (Input.GetKey(KeyCode.Alpha3))
        {
            //在指定位置施加力
            r.AddForceAtPosition(new Vector3(0f, 10f, 0f), new Vector3(0.5f, 0.5f, 0.5f));
        }
    }
}
RightText.cs

 

 

Collider的主要功能是進行碰撞檢測 使用剛體時,一般都會和Collider共同使用

 

碰撞事件

  發生碰撞的兩個物體必須都帶有Collider

  發生碰撞的兩個物體至少有一個帶有剛體

  發生碰撞的兩個物體必須有相對運動

 

碰撞相關的三個事件

 

   碰撞開始時調用一次 void OnCollisionEnter(Collision other)

   碰撞持續發生時調用 void OnCollisionStay(Collision other)

   碰撞結束時調用 void OnCollisionExit(Collision other)

 

(A物體與地面進行了碰撞檢測)

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ColliderText : MonoBehaviour {

    void OnCollisionEnter(Collision other)
    {
        print("碰撞開始!!!");
    }

    void OnCollisionStay(Collision other)
    {
        print("碰撞中!!!");
    }

    void OnCollisionExit(Collision other)
    {
        print("開始結束!!!");
    }
}
ColliderText.cs

 

 

觸發器相關的三個事件 

 

  剛剛進入觸發范圍時調用一次 void OnTriggerEnter(Collider other)

  持續在觸發范圍內會一直調用 void OnTriggerStay(Collider other)

   離開觸發范圍時會調用一次 void OnTriggerExit(Collider other)

 

  勾選A物體Box Collider下的Is Trigger屬性(無視碰撞觸發函數)

  

(因為A物體不會和地面進行碰撞,所以就直接穿過去了)

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ColliderText : MonoBehaviour {

    //剛剛進入觸發范圍時調用一次_
    void OnTriggerEnter(Collider other)
    {
        print("觸發開始!!!");
    }

    //持續在觸發范圍內會一直調用_
    void OnTriggerStay(Collider other)
    {
        print("觸發器檢測中!!!");
    }

    //離開觸發范圍時會調用一次
    void OnTriggerExit(Collider other)
    {
        print("觸發結束!!!");
    }
}
ColliderText.cs

 

 

物理材質

 

  物理材質能夠給物體添加摩擦力和彈力

  物理材質只能添加到帶有Collider的對象上

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM