通过碰撞器(Collider)组件的运用,我们可以对游戏中的物体设置碰撞、反弹效果。
1、种类介绍
Unity中内置了6种碰撞器:
1)盒子碰撞器(Box Collider)即方形碰撞器,适用于冰箱、桌子……
2)球形碰撞器(Sphere Collider)即圆形碰撞器,适用于篮球、石头……
3)胶囊碰撞器(Capsule Collider)由一个圆柱体和上下两个半球组成,主要用于 人物角色控制器。
4)网格碰撞器(Mesh Collider)在物体网格上构建的碰撞器,用于复杂的网格检测。
5)车轮碰撞器(Wheel Collider)即字面意思。
6)地形碰撞器(Terrain Collider)字面意思。
碰撞器的添加:
首先选中游戏体Ball,点击Component>Physics>Box Collider,可以在6中碰撞器中选择自己需要的。如下图1.1所示。
图1.1
2、碰撞器参数:
Is Trigger:启用时Collider用于触发事件 Material:物理材质(比如画画用的颜料)
Size:碰撞器在XYZ轴上的尺寸 Radius:球形碰撞器半径的大小
Height:胶囊碰撞器圆柱体的高度
3、碰撞过滤
对不需要进行碰撞的游戏体可以进行碰撞过滤。
实例代码如下:
void Start () {
Physics.IgnoreCollision(BallA.GetComponent<Collider>(), BallB.GetComponent<Collider>());
Physics.IgnoreCollision(BallA.GetComponent<Collider>(), BallC.GetComponent<Collider>());
}
控制球A不和球B、C发生碰撞。
4、碰撞层
通俗来讲,碰撞层就好比一个标识符,可以设置不同层之间的游戏体发生碰撞,也可以设置同层游戏体之间发生碰撞。碰撞层的添加如下图1.1所示。
Edit>Project Settings>Tags and layers
图1.2
5、简单案例
1、案例说明:
demo运行后,小球受重力影响落下来,对第一列球忽略碰撞重叠在一起,其他列发生物理碰撞(相同颜色的球重叠)。
界面如图1.3,1.4所示。
图1.3
图1.4
2、制作流程:
创建一个Plane充当地板,创建12个小球(Sphere),添加3个碰撞层(红、绿、蓝),更改小球的碰撞层。为地板和球添加纹理图片。
简单界面如上图1.3所示。
3、在Assets内点击鼠标右键,Create>C#Script,重命名为Script2,双击打开脚本编写代码。
using UnityEngine;
using System.Collections;
public class Script3 : MonoBehaviour {
public Transform RedBall;
public Transform GreenBall;
public Transform BlueBall;
// Use this for initialization
void Start () {
Physics.IgnoreCollision(RedBall.GetComponent<Collider>(), GreenBall.GetComponent<Collider>());
Physics.IgnoreCollision(RedBall.GetComponent<Collider>(), BlueBall.GetComponent<Collider>());
}
// Update is called once per frame
void Update () {
}
}
6、物理材质
在游戏开发过程中,往往需要特殊的碰撞效果,比如:篮球从空中落到地板上时回弹起,铅球落到沙坑里不会弹起。
物理材质常用的3个参数:弹性(Bounciness) 动摩擦系数(Dynamic Friction) 静摩擦系数(staticFriction)。
弹性(Bounciness):范围在0~1之间,0表示没有弹性,1表示完全反弹(没有能量损耗)。
动摩擦系数(Dynamic Friction) 静摩擦系数(staticFriction):范围在0~1之间,0表示没有摩擦,1表示摩擦很强类似橡胶面。
各向异性摩擦(Friction Direction2)?
指物体不同方向上摩擦力不同。比如:汽车向前、向后的摩擦力很小,但向左向右摩擦力就会很大。
案例描述:小球从空中落下来,弹跳碰撞落到墙面上。如下图1.5所示。
图1.5