版权声明:欢迎订阅公众号【5厘米的理想】,愿生命里的每一个小理想,都能成为生命里的小确幸。本文地址为: http://blog.csdn.net/qinyuanpei/article/details/23093665

大家好,欢迎大家关注由我为大家带来的Unity3D游戏开发系列文章,我的博客地址为:http://blog.csdn.net/qinyuanpei。

今天我们来一起来学习Unity3D中一个很重要的概念:碰撞。为什么说碰撞很重要呢?因为在游戏中无时无刻不充满碰撞啊,在飞行类游戏中我们需要判断炮弹是否击中了敌人,在RPG游戏中我们需要判断玩家是否对敌人造成了伤害,在射击类游戏中我们需要判断子弹是否打中了敌人.......总而言之,在游戏中所谓的打击感就是我们今天要讲的碰撞,从概念上来说,一个物体受到来自其它物体的力的影响并发生位置或者状态上的改变,我们就可以称为碰撞。在Unity3D中系统已经提供了碰撞检测的相关方法,这里我们介绍两种碰撞检测的方法:

Collision检测:使用Collision检测需要用到下面三个重要的方法:OnCollisionEnter()在刚体与刚体接触时立即调用此方法、OnCollisionStay()在刚体与刚体碰撞中调用此方法、OnCollisionExit()在刚体与刚体碰撞结束时调用此方法。

Trigger检测:使用Trigger检测需要勾选IsTrigger属性,并用到下面的三个重要方法:OnTriggerEnter():开始碰撞、OnTriggerStay():碰撞中 、 OnTriggerExit():结束碰撞。

那么两种检测方法的区别是什么呢?Collision将造成物理碰撞,Trigger将造成非物理碰撞 。于此同时,请牢记下面的碰撞原则:发生接触(Trigger)的前提是:双方都有碰撞器,且至少一方有刚体,且至少一方勾选了IsTrigger属性。发生碰撞(Collision)的前提是:双方都有碰撞器,且至少一方有刚体。

下面我们来看一个演示项目,首先创建如图所示的场景。

这里我们对碰撞的目标做了判断,如果我们碰撞的对象的Sphere,则会执行目标对象的脚本中的方法,并输出碰撞信息。目标对象Sphere的脚本和Cube类似,这里就不给出了。最后我们来看结果,如我们所预期的那样,屏幕上打印出了碰撞信息,控制台同样输出了相应的信息。

在这个演示项目中,我们将使用键盘来控制左边的Cube来碰撞右边的球体,然后再屏幕上打印碰撞信息,在控制台中输出脚本的调用情况。

首先我们来看为Cube编写的部分脚本代码:

[csharp]  view plain copy
  1. //一个控制台输出方法
  2. public void Log(string msg)
  3. {
  4. Debug.Log(msg);
  5. }
  6. //碰撞开始
  7. void OnCollisionEnter(Collision collision)
  8. {
  9. if(collision.gameObject.name=="Sphere")
  10. {
  11. Message="进入碰撞,碰撞名称:"+collision.gameObject.name;
  12. collision.gameObject.GetComponent<TargetScript>().Log(Message);
  13. }
  14. }
  15. //碰撞中
  16. void OnCollisionStay(Collision collision)
  17. {
  18. if(collision.gameObject.name=="Sphere")
  19. {
  20. Message="碰撞中,碰撞名称:"+collision.gameObject.name;
  21. collision.gameObject.GetComponent<TargetScript>().Log(Message);
  22. }
  23. }
  24. //碰撞结束
  25. void OnCollisionExit(Collision collision)
  26. {
  27. if(collision.gameObject.name=="Sphere")
  28. {
  29. Message="碰撞结束,碰撞名称:"+collision.gameObject.name;
  30. collision.gameObject.GetComponent<TargetScript>().Log(Message);
  31. collision.gameObject.rigidbody.Sleep();
  32. }
  33. }

为什么这里要编写两个输出到控制台的方法呢?因为在实际的游戏开发中,当发生碰撞的时候,我们可能需要作出一些更为实际的事情,比如给敌人减血啦,给我方加血啦,这里只是简单地了解了Unity3D的碰撞机制,Trigger检测和这个基本类似,这里就不再赘述啦,谢谢大家,今天的内容就是这样啦!

unity3D之简单的碰撞检测 .相关推荐

  1. Unity3D教程:简单的碰撞检测

    需求:当立方体Cube碰到地面Plane的时候,输出碰撞物体的名称,则表述检测到立方体碰撞了地面. 1.搭建一个简单的场景. 在新的工程中选择File->new Scene创建新的场景.然后在该 ...

  2. 用Unity3D实现简单的牧师与魔鬼游戏(动作分离版)

    用Unity3D实现简单的牧师与魔鬼游戏(动作分离版) 项目地址 牧师与魔鬼游戏(动作分离版) 完成效果图 上次博客链接 牧师与魔鬼游戏 实现心得 这次作业是在上次作业的基础上完成的,具体做出的改变是 ...

  3. 用Unity3D实现简单的牧师与魔鬼游戏

    用Unity3D实现简单的牧师与魔鬼游戏 项目地址 牧师与魔鬼游戏 完成效果图 实现心得 游戏所使用的是MVC模式开发. 遵循的动作表为: 动作 条件 开船 船上至少有一个角色(牧师或魔鬼) 牧师在左 ...

  4. 用Unity3D实现简单的井字棋小游戏

    用Unity3D实现简单的井字棋小游戏 项目地址 井字棋小游戏 完成效果图 实现思路 首先定义游戏的数据部分: /* 井字棋中每一个棋格中的逻辑控制常量,代表这个棋格的状态 */ private co ...

  5. QT学习之视图框架下的简单的碰撞检测

    由于最近要写一个东西,所以跳过了一些内容,学到了视图框架和一些简单 的碰撞检测. 对于视图框架,我的理解还是不够深,等以后做项目深入了解后,我会回来更新. 我是写了一个自己的场景和两个图形项.先看ma ...

  6. Unity3D的简单商店、背包与装备系统

    物品元素可以说是所有RPG的必备系统,毕竟,如果没有物品系统就没有消耗,没有消耗哪能骗玩家充钱呢?最简单的物品系统应该是所谓的商店.背包加装备的结构,而这个Demo则主要基于UGUI实现一个简单的上述 ...

  7. 【Unity3D】利用物体碰撞检测、键盘输入处理完成平衡球游戏

    物体碰撞检测是游戏编程里面非常常用的功能,一旦碰到就怎么怎么样,比如掉血等.Unity3D直接就提供了物体碰撞检测的接口,实现起来很方便.借此功能,完成了一个平衡球游戏,同时说明Unity3D的物体碰 ...

  8. Unity3D的简单商店、背包与装备系统(UGUI)

    Store And Equipment System In Unity3D Introduction 物品元素可以说是所有RPG的必备系统,毕竟,如果没有物品系统就没有消耗,没有消耗哪能骗玩家充钱呢? ...

  9. Unity3D笔记---简单的捕鱼小游戏

    说是捕鱼达人小游戏,其实也没有完全实现捕鱼的功能,只是一个Unity3D前期学习过程中对于Sprite2D的运用,下面我来介绍一下我的界面 界面组成很简单,主要是生成鱼,以及与的运动,子弹的运动,碰撞 ...

最新文章

  1. Netty 源码(ChannelHandler 死磕)
  2. HibernateTemplate、HibernateDaoSupport两种方法实现增删改查Good
  3. Android开发记录(转)
  4. 腾讯注册狗头表情包商标
  5. 【Elasticsearch】Elasticsearch日志场景最佳实践
  6. torch将多个tensor张量合并为一个张量,只提高迷你批次的纬度
  7. Qt总结之三:磁盘文件操作、遍历文件夹和文件目录,并过滤和获取文件信息、后缀名、前缀名(三)
  8. java项目开发团队协作重要性_Java 项目开发团队有必要统一 IDE 吗?
  9. PSP联机插件pro online
  10. firedrake求解NS方程
  11. 高等数学(第七版)同济大学 习题4-1 个人解答
  12. 架构真经深有体会、感触很深
  13. git.exe push --progress origin master:master To https://192.168.3.145:10102/r/~lifan/tms-vue.git !
  14. 大数据为我们的生活带来了什么?
  15. 深度学习中的优化问题
  16. 工业应用中基于三维模型的6D目标检测综述
  17. Backbone,Bottlenect,Head等术语
  18. CF 192 DIV2
  19. Apache Spark 2.2.0 中文文档 - 快速入门 | ApacheCN
  20. 博图程序需要手动同步_西门子博图v15新功能-工程组态选件

热门文章

  1. 常用SQL语句(一)
  2. ORACLE 启动报错 ORA-00600: internal error code, arguments
  3. HDMI2.0RE驱动控制方案AG7120和AG7220性能参数对比
  4. SQL数据库损坏及恢复分析
  5. 越来越多的Java程序员转行Java大数据...
  6. 详解tf.variable_scope函数
  7. 计算机网络的常见面试题
  8. iphone x264 库编译方法
  9. 微前端在得物客服域的实践/那么多微前端框架,为啥我们选Qiankun + MF
  10. 关于如何修复移动热点无网络(无互联网连接)的问题