在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()是不能同时存在的