您的位置:首页 > 移动开发 > Unity3D

和小伙伴们一起学Unity3D(六)碰撞与触发器

2013-08-27 15:51 246 查看
        在上一节我们介绍了刚体,但刚体只能使物体可以在力的作用下运动,小球之所以能撞到地面而不是穿过地面,是因为在创建物体时,U3D自动为每个物体附加了碰撞器,有了碰撞器,才会使物体正常的碰撞,而不是穿过。

        接着上节的项目,选中Shere,点掉物体的材质渲染Mesh Renderer选项,在Scene视图里的绿线就是碰撞器

       


       在碰撞器的属性中我们可以看到,U3D允许我们手动调节碰撞器的位置和大小(这里告诉大家一个小技巧,鼠标放在X,Y,Z,Radius,当鼠标变成两个左右对立的小箭头时,上下移动鼠标可以调节编辑框里的数值)

       对于简单的几何物体,碰撞器相对简单,而当物体的模型是一个个鲜活的人物,球形碰撞器或者方盒碰撞器显然无法正常模拟物体的碰撞范围,这时就需要用到网状碰撞器。选中小球,在菜单栏选择Component——>Physics——>Mesh Collider在弹出是否替换碰撞器的对话框中选择替换,这样我们就为物体添加了网格碰撞器,在Scene视图,我们可以看到,网格碰撞器是按照物体的形状精密的排布,这样,不论物体是什么形状,我们都可以为它添加碰撞器了,但值得注意的是:两个网格碰撞器是不发生碰撞的

      触发器:

      在游戏中我们常常遇到这样的场景,走近一片特定区域,人物就会被传送或者遇到怪物,这就是我接下来要介绍的触发器(概念太过学术,不喜欢,就不说了),在上图中选中Is Trigger,碰撞器便成了触发器,需要注意的是,触发器是可以被穿越的,不然我们怎么进入这边区域呢,对吧

     和碰撞器一样,触发器也有相应的行为函数:

     OnTriggerEnter:当物体进入触发器的一瞬间触发

     OnTriggerStay:当物体进入触发器后离开触发器前触发

     OnTriggerExit:当物体离开触发器的一瞬间触发

为了让大家理解触发器,我们接着上节的项目,做一个小测试

      选中Cube,将它作为触发器,将下面的脚本拖到Cube上

using UnityEngine;
using System.Collections;

public class TriggerTest : MonoBehaviour {

// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {

}

void OnTriggerEnter(Collider other)
{
print(other.gameObject.name + "Enter");
}

void OnTriggerStay(Collider other)
{
print(other.gameObject.name + "Stay");
}

void OnTriggerExit(Collider other)
{
print(other.gameObject.name + "Exit");
}
}


 

运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: