OnTriggerEnter2D :触发器 和 OnCollisionEnter2D:碰撞器
①触发器是碰撞器的一个功能
②在想要做碰撞检测时使用碰撞器
③碰撞器生效的必要条件,碰撞的双方A,B都必须都Collider,其中有一方要带有rigidbody。
④当想要做碰撞检测却又不想产生碰撞效果时,就可以用isTrigger,在这个状态下触发检测生效,碰撞检测失效。

例子 一个物体与多个其他物体做碰撞检测应怎样写。
当两类物体需要相互碰撞,应尽可能的用某一方来检测,以避免 两者碰撞触发时机不确定,谁先谁后不确定的问题。
我在做一个弹跳的主角(A)碰到元素(B,有很多),时 需要给主角触发一个反弹效果,还需要将元素隐藏。 起初,我把A的触发效果写在A的碰撞检测里面 ,B的隐藏方法写在B的碰撞检测里面。 这样的话 就会发现 A 碰到B的时候,A有时候能触发反弹效果,有时候却不能,但是B都是隐藏了。 究其原因是,A和B相互碰撞时,两者的碰撞检测谁先谁后是不确定的,有可能A先检测到,也有可能B先检测到。
如果是A先检测到,那好没问题,效果可以触发,然后B检测到,B消失。
可如果是B先检测到,那B就消失了,这时候A是检测不到B的,因为B已经消失,所以A的效果也就没触发。 就会有上面描述的很奇怪的现象了。
避免这类情况发生,应将碰撞检测时想要触发的效果和方法都写在一边! 一开始我全部写在A里面,又出现问题了,A的反弹效果和B消失都能执行,但每次只能执行一次,A一次碰到多个B的时候,按照逻辑,应该将碰到的多个B都消失,可这样的写法,只能将检测到的第一个B消失,然后执行反弹效果,脱离了与其他未消失B的检测范,导致B不能执行消失方法。 这样不好。
最佳办法是,将检测写在B里面,当A接触到B时,B每一个都自己来检测A,A能执行效果,B也能正常消失。

贴上部分代码

 public override void OnTriggerEnter2D(Collider2D collision){if (collision.tag == "Player" && BisonController.Instance.bisonState == BisonState.down){BisonController.Instance.Rebound();BisonController.Instance.VandH(new Vector2(0,-3));BisonController.Instance.bisonState = BisonState.up;Debug.Log("NPC1的反弹效果");}base.OnTriggerEnter2D(collision);}

Unity中OnTriggerEnter2D 和OnCollisionEnter2D 的使用情形及容易掉的坑相关推荐

  1. Unity中,Destory()和DestroyImmediate()的一些坑

    今天写代码的时候,遇到了个需求,需要删除一个对象,然后同一帧中创建一个新的同名对象,直接使用Destory方法,删除的话,由于我做了对象缓存,并且删除再OnDestory中进行的缓存清理,所以会导致创 ...

  2. Unity中一些小技巧

    在unity中有一些小技巧,不能像人物的移动,攻击等有好几种方式可以用来单独成章,因此就把一些内容比较少,但是比较重要的内容放在一起合成一章,内容将会持续更新 1.人物死亡动画的播放:人物死亡后,需要 ...

  3. 在Unity中构建Pong克隆:UI和游戏玩法

    In Part 1 of this tutorial – the Retro Revolution: Building a Pong Clone in Unity – we created a Pon ...

  4. 各Rendering Path技术以及其在Unity中的实现

    Rendering Path其实指的就是渲染场景中光照的方式.由于场景中的光源可能很多,甚至是动态的光源.所以怎么在速度和效果上达到一个最好的结果确实很困难.以当今的显卡发展为契机,人们才衍生出了这么 ...

  5. Unity中的混合光照

    Unity中的混合光照 Baked Indirect Shadowmask Distance Shadowmask Subtractive Reference Unity支持三种混合光照模式,分别是B ...

  6. Unity中单点和多点触控

    Input.touchCount获取当前的触摸点数目,若为1则是单点触控,大于1则是多点触控 点击事件用:Input.GetTouch(num).phase== TouchPhase.Began这样的 ...

  7. Unity中利用C#开发泡泡龙游戏

    泡泡龙是一款非常经典的游戏,版本有很多,如百度的<彩色泡泡>等.游戏开始时,泡泡应该出现m行:如果连续n次发射泡泡没有出现同色泡泡相消的情况,在屏幕上方自动加上一行泡泡:如果屏幕中泡泡全部 ...

  8. Unity中旋转方式的探究与对万向节死锁(Gimbal Lock)的理解

    Gimbal Lock Gimbal Lock的原理网上已经有很多资料,详细可以看介绍视频.视频讲到Gimbal Lock的时候提到x,y,z三个坐标轴是有从属关系(hierarchical syst ...

  9. 【Unity2D】实现Unity中Player受伤以及闪烁特效

    学习目标: 参考视频:秦无邪OvO的个人空间_哔哩哔哩_Bilibili 上一篇文章:[Unity2D]简单实现相机跟随Player功能以及攻击敌人时相机抖动_dangoxiba的博客-CSDN博客学 ...

最新文章

  1. Android.mk文件语法规范及使用模板 (转载)
  2. 【Paper】2019_Distributed Optimal Control of Energy Storages in a DC Microgrid with Communication Dela
  3. c语言用栈编写数制转换程序,数制转换-栈的应用(C++实现)
  4. mkpasswd命令使用方法
  5. vue 数组转集合_思想实验:如何在Vue中使localStorage具有响应式?
  6. 干货 | 科研大牛们怎么读文献?
  7. 二货同事!写上千行的类!这样的代码让我生不如死!
  8. 在Asp.net Mvc 3中使用swfupload
  9. tp3.2 获取post,get,session,cookie变量
  10. asp.net网上书店系统
  11. Visual Studio2010安装步骤
  12. apache ii评分怎么评_apache ii评分多少分为危重患者
  13. 深入Guerrilla Games解密次世代开山大作《杀戮地带暗影坠落》(The technology of Killzone Shadow Fall)
  14. 生成条形码(jsbarcode、vue-barcode)
  15. 原子操作:CAS、TAS、TTAS、FAA浅析
  16. 什么是计算机?计算机的硬件系统组成有哪些?
  17. 征途单机版mysql_win7架设征途单机 MYSQL卡到这一步
  18. 建个网站需要多少钱?
  19. php-resque消息队列
  20. TCP为什么三次握手?

热门文章

  1. 基于超声图像散斑统计的各向异性扩散滤波器附matlab代码
  2. 双目测距------双目相机V1.0,将双目相机采集到任意一点的深度数据进行串口传输(带源码)
  3. asp.net Backup DataBase
  4. DevOps落地实践:Azure
  5. Common Weakness Enumeration (CWE) 2021 Lastest
  6. stm32添加了固件库但是找不到h文件
  7. MATLAB中Simulink的模块封装
  8. 如何合并pdf文件?
  9. 输入一行文字,找出其中大写字母、小写字母、空格、数字以及其他字符各有多少(使用指针)
  10. 怎样编写java会员卡号_会员卡设计java