在unity中需要兩個物體能相互碰撞,就需要給它加上碰撞器(collider)
1.添加碰撞器組件
選中需要加collider的物體,在inspector面板,然後點擊Add Component–Physics,可以看到有六種collider,分別是
Box Collider(盒碰撞器)
Sphere Collider(橢圓碰撞器)
Capsule Collider(膠囊碰撞器)
Wheel Collider(車輪碰撞器)
Mesh Collider(網格碰撞器)
Terrain Collider(地形碰撞器)
添加collider之後可以設置它們的參數
Mesh Collider效果更好,可以比較精細,但是佔用電腦資源更多
需要注意的是,
碰撞器(Collider)不需要剛體(Rigidbody)
剛體(Rigidbody)要發生碰撞,一定需要碰撞器(Collider)
沒有碰撞器的剛體(Rigidbody),會在場景中可以相互穿透
2.直接給導入的fbx資源加上collider
爲了方便,我們可以直接給導入的fbx模型生成collider
在project面板選中fbx,在它的inspector面板的Model一欄,勾選“Generate Colliders”,再點Apply就可以生成合適的mesh collider了
3.碰撞方法
測試的兩個物體,都加上Collider和Rigidbody,然後把腳本添加上,當它們相碰撞的時候就會觸發對應的方法了
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class collider : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
private void OnCollisionEnter(Collision collision) {
Debug.Log("開始碰撞:" + collision.collider.gameObject.name);
}
private void OnCollisionStay(Collision collision) {
Debug.Log("持續碰撞:" + collision.collider.gameObject.name);
}
private void OnCollisionExit(Collision collision)
{
Debug.Log("結束碰撞:" + collision.collider.gameObject.name);
}
}
還需要注意的是,碰撞的兩個物體只要勾選一個isTrigger那麼就能進入OnTriggerEnter方法,OnCollisionXXXX()和OnTriggerXXXX()是不能同時存在的