1、重力
剛體組件
英文 | 中文 | 描述 |
---|---|---|
RigidBody | 剛體組件 | physics->rigidbody ,剛體組件使一個物體有了質量,重力等。,use gravity 勾選后,物體才會受到重力,會自動下落,取消勾選就不會。,,is kinematic 表示運動學剛體,此時物體質量為0,就不會受重力的影響。 |
1. 質量2. 阻力3. 角阻力4. 使用重力(取消后,只是不受重力影響,阻力等還是受影響的)5. Is Kinematic(是運動學的,勾選后,不受物理影響)6. 插值(一般不用修改,插值是按照上一幀做插值,外推是按照下一幀做插值)7. 碰撞檢測(離散的節省性能非連續檢測高速物體檢測不到,持續和連續動態是相對的快速的物體是連續動態不動的選擇持續比較好但是浪費性能,沒有翻譯的Co...是連續檢測性能低于持續和連續高于離散)8. Constraints(凍結位置是值某個方向不能運動,凍結旋轉同理)
2、碰撞的產生和監聽
英文 | 中文 | 描述 |
---|---|---|
Mesh Collider | 網格碰撞器 | |
Sphere Collider | 球體碰撞器 |
- 碰撞中心(修改了碰撞中心會發生偏移)
- 碰撞半徑(大了會間隔碰撞,下了會穿透一部分)
碰撞組件實際碰撞發生的是碰撞線框
碰撞條件
- 至少有一個物體有剛體組件
- 只有物體都有碰撞器的時候才會發生碰撞
//設置一個爆炸的預設體
public gameObject Prefab;
//監聽發生碰撞private void OnCollisionEnter(Collision collision){ //創建一個新的爆炸物體Instantiate(Prefab, transform.position, Quaternion.identity)//銷毀自身(火焰物體) Destroy(gameObject); //碰撞到的物體信息Debug.Log(colision.gameObject.name);Debug.Log("碰撞發生!");}
//持續碰撞中private void OnCollisionStay(Collision collision){ Debug.Log("持續碰撞中!");}
//結束碰撞private void OnCollisionExit(Collision collision){ Debug.Log("結束碰撞!");}
3、觸發
觸發條件 和碰撞器一樣
- 至少有一個物體有剛體組件
- 只有物體都有碰撞器的時候才會發生碰撞,只是其中一個碰撞器設置成觸發器;一般觸發器設置成看不見的
可移動的游戲物體腳本
void Update(){//水平軸float horizontal = Input.GetAxis("Horizontal");//垂直軸float vertical = Input.GetAxis("Vertical");//創建成一個方向向量Vector3 dir = new Vector3(horizontal, 0, vertical);//朝向量方向移動Translate是平移,*Time.dalteTime是指每秒transform.Translate(dir*Time.dalteTime);}
觸發器物體的腳本
物體Cube (1)是墻壁,觸發后執行的物體,下面代碼是觸發后Cube (1)墻體消失
private void OnTriggerEnter(Collider other){GameObject cube = GameObject.Find("Cube (1)");if (cube != null){cube.SetActive(false);}}private void OnTriggerStay(Collider other){}private void OnTriggerExit(Collider other){}
4、物理關節(鉸鏈,彈簧等)
添加組件的時候搜索關節,會有很多,
鉸鏈關節
可以做固定軸旋轉
Anchor 是軸的位置
軸是軸的方向
Use Motor 自動
彈簧關節
需要兩個物體鏈接,在a物體加彈簧組件,把b物體拖入剛體Connected Body 就鏈接了,其他屬性不細說了
固定關節
和彈簧類似, 需要兩個物體鏈接,在a物體加彈簧組件,把b物體拖入剛體Connected Body 就鏈接了,其他屬性不細說了
但是性質不同,就會固定在一個物體上,無法移動等;類似膠水,可以設置斷開力,到達足夠力時就斷開鏈接
其他關節暫時不講
5、物理材質
不同材質有不同的效果、如冰面和土地的摩擦力不同;
新建-》物理材質,可以設置摩擦力彈力等;
給物體添加材質