碰撞器由来

1.系统默认会给每一个对象(GameObject)加入一个碰撞组件(ColliderComponent),一些背景对象则能够取消该组件。

2.在unity3d中,能检測碰撞发生的方式有两种,一种是利用碰撞器,还有一种则是利用触发器。这两种方式的应用很广泛。为了完整的了解这两种方式,我们必须理解下面概念:

(一)碰撞器是一群组件,它包括了非常多种类,比方:Box Collider,Capsule Collider等,这些碰撞器应用的场合不同,但都必须加到GameObjecet身上。

(二)所谓触发器,仅仅须要在检视面板中的碰撞器组件中勾选IsTrigger属性选择框。

(三)在Unity3d中,主要有下面接口函数来处理这两种碰撞检測:



触发信息检測:

1.MonoBehaviour.OnTriggerEnter( Collider other )当进入触发器

2.MonoBehaviour.OnTriggerExit( Collider other )当退出触发器

3.MonoBehaviour.OnTriggerStay( Collider other )当逗留触发器



碰撞信息检測:

1.MonoBehaviour.OnCollisionEnter( Collision collisionInfo ) 当进入碰撞器

2.MonoBehaviour.OnCollisionExit( Collision collisionInfo ) 当退出碰撞器

3.MonoBehaviour.OnCollisionStay( Collision collisionInfo )  当逗留碰撞器

碰撞使用场景

1.给主角加入刚体(Rigidbody)组件,而且取消刚体组件的重力选项UseGravity。

2.主角碰到一些物体后会有一系列反应。举例,完雷电游戏时,飞机能够获取一些加速球能量球,碰到这些球体,飞机自身属性会有所提高
下图:蓝色球为“加速球”,红色球为能量球,的当飞机接触球体时,属性就会添加



主角的脚本代码例如以下:
using UnityEngine;
using System.Collections; public class Hero : MonoBehaviour { private float move_v = 0;//纵向移动距离
private float move_h = 0;//横向移动距离
public float m_speed = 1.5f;//移动速度
public float m_power = 1.0f;//飞机的威力能量
private Transform m_transform; void Start () {
m_transform = this.transform;
} void Update () {
Move();
} //飞机与物体发生碰撞,须要推断碰撞体是什么类型
void OnTriggerEnter(Collider e)
{
if (e.gameObject.tag.CompareTo("tagSpeedBall")==0)
{
Debug.Log("捡到加速球");
m_speed += 5;//速度+2
Destroy(e.gameObject);//销毁加速球
} if (e.gameObject.tag.CompareTo("tagPowerBall") == 0)
{
Debug.Log("捡到能量球");
m_power += 2;//威力+2
Destroy(e.gameObject);//销毁能量球
}
}
//移动方法
void Move()
{
//向上
if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow))
{
//移动距离
m_transform.Translate(-Vector3.forward * Time.deltaTime * m_speed); }
//向下
if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow))
{ m_transform.Translate(Vector3.forward * Time.deltaTime * m_speed); } //向左
if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow))
{ m_transform.Translate(Vector3.right * Time.deltaTime * m_speed);
} //向右
if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow))
{ m_transform.Translate(Vector3.left * Time.deltaTime * m_speed);
} } }


Unity3D入门(二):碰撞检測的更多相关文章

  1. Cocos2d-x 精灵碰撞检測(方法二)

    将"Cocos2d-x 精灵碰撞检測(方法一)" update函数改动一下. 使用精灵boundingBox函数获取直接精灵边界框, 不用自己计算精灵矩形大小了,还比較精确,然后调 ...

  2. Cocos2d-x教程(35)-三维拾取Ray-AABB碰撞检測算法

    欢迎增加Cocos2d-x 交流群:193411763 转载时请注明原文出处 :http://blog.csdn.net/u012945598/article/details/39927911 --- ...

  3. Cocos2d-x教程(34)-三维物体OBB碰撞检測算法

    欢迎增加Cocos2d-x 交流群:193411763 个中心点.1个旋转矩阵和3个1/2边长(注:一个旋转矩阵包括了三个旋转轴,若是二维的OBB包围盒则是一个中心点,两个旋转轴,两个1/2边长). ...

  4. cocos2d-x ios游戏开发初认识(八) 触摸事件与碰撞检測

    玩过植物大战僵尸都知道,要在草坪里放一朵向日葵或者其他的植物仅仅需触摸那个植物将其拖入到想要摆放的位置,这事实上就是这节要写的触摸事件.还能够发现当我们的僵尸出来的时候,我们的小豌豆会发子弹攻击僵尸, ...

  5. cocos2d-x 旅程開始--(实现瓦片地图中的碰撞检測)

    转眼隔了一天了,昨天搞了整整一下午加一晚上,楞是没搞定小坦克跟砖头的碰撞检測,带着个问题睡觉甚是难受啊!还好今天弄成功了.只是感觉程序不怎么稳定啊.并且发现自己写的东西让我重写一遍的话我肯定写不出来. ...

  6. cocos2d-html5 碰撞检測的几种方法

    游戏中的碰撞还是比較多的,比方角色与角色的碰撞,角色与墙壁的碰撞,角色与怪物的碰撞等,都须要 进行碰撞的检測,来触发一定的事件 近期在尝试制作一个小游戏的时候须要用到碰撞检測,然后就查了下资料,并在论 ...

  7. iOS 碰撞检測以及事件响应

    */ //碰撞检測 //碰撞检測de过程 //碰撞检測 //碰撞检測 //碰撞检測 //UIApplication-> UIWindow-> UIController-> 视图控制器 ...

  8. cocos2d-x游戏开发 跑酷(八) 对象管理 碰撞检測

    对象管理类的原理是这种: ObjectManager类是一个单例类,全局仅仅有一个对象实例存在.初始化的时候创建两个数组CCArray来保存金币和岩石.为什么要保存,由于在地图重载的时候.要销毁看不见 ...

  9. Cocos2d-x3.0游戏实例之《别救我》第七篇——物理世界的碰撞检測

    事实上我也非常吃惊-居然写到第七篇了,我估计也就是四篇的内容,感觉非常奇妙,我也不会非常唠叨什么吖);    // 0001 );   // 0001 ); // 0001 这样我们才干监听到它们的碰 ...

随机推荐

  1. try..catch..finally执行顺序return

    try..catch..finally这个语法大家都很熟悉,就是捕捉异常.处理异常,面试中经常被问到的一个问题是:如果在try...catch中的某某地方return了,那么之后的某某步骤还会不会执行 ...

  2. c#中,DataTable 过滤重复行

    虽然网上有很多DataTable过滤重复行的方法,但是本菜还是认为自己写的这个方法最靠谱,这里的参数是传递的DataTable值,返回的是一个已经过滤相同字段StuId,ExamNum的DataTab ...

  3. iOS开发经常使用宏定义

    iOS开发经常使用宏定义 iOS开发中经常须要获取屏幕宽度高度,为view设置颜色,为imgagView设置图片等,我们都可定义一些宏,随时都可拿来使用,方便开发 <span style=&qu ...

  4. ios添加pre和post build action

    再vs中,我们可以很方便的再build前.后执行一些脚本为我们做点什么事情.再ios中怎么搞呢,哪必然是对xcode进行操作了.再google搜索了一把,有说操作Scheme的也有说再直接再targe ...

  5. delphi 网页提交按钮执行点击事件

    遍历即可实现,下列代码仅供参考: var i: integer; T: OleVariant; begin T := WebBrowser1.Document; do begin if T.all.i ...

  6. Mysql ODBC 5.1 Driver免安装脚本

    在使用Mysql 的时候,需要使用ODBC数据源的方式来连接mysql,所以常常需要用到免安装的驱动,自己参考官网的脚本, 修改了一个实用点的脚本,放出来大家一起分享: 安装mysql odbc 5. ...

  7. spring开发基础

    Spring是一个开源框架,它由Rod Johnson创建.它是为了解决企业应用开发的复杂性而创建的.Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情.然而,Spring的用途 ...

  8. ORACLE 中的一些特殊符号

    oracle通配符,运算符的使用 用于where比较条件的有: 等于:=.<.<=.>.>=.<> 包含:in.not in exists.not exists 范 ...

  9. 腾讯文学动作密集 疑为手Q发力移动阅读铺路

        移动互联网的门票之争并未结束,百度收购91无线,阿里投资新浪微博.UC浏览器,网易推易信.云音乐等等,都是互联网巨头争夺移动互联网门票的最佳案例.不过,上述任何巨头都不可忽视腾讯这个“狠角色” ...

  10. zoj 3870

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5518 题意:n个数,从中选出两个数,问这两个数的异或值大于两个数较大 ...