碰撞检测 BoxCollider 的特殊实现
来源:互联网 发布:kingdee数据在那里 编辑:程序博客网 时间:2024/05/21 11:26
当做触发器的Collider检测,可以通过
private void OnTriggerStay(Collider collider);
private void OnTriggerEnter(Collider collider);
private void OnTriggerExit(Collider collider);
来实现,当有物体与当前触发器碰撞时候自动调用OnTriggerEnter(),当物体在触发器内容时候自动调用OnTriggerStay(),当物体离开触发器时候自动调用OnTriggerExit(),
但是当处于触发器内部的物体消失(被消灭,被杀死 Deactive)时候,这个物体就不会触发OnTriggerExit,有兴趣的同学可以自己测试一下。
所以当我们需要实现一个这样的效果:
当有目标物体进入触发器内部的时候就发出一个进入的事件,之后当触发器内部没有物体的的时候再发出一个退出的事件。
注意这里触发器内部没有物体是在先有进入物体的条件下,所以当使用OnTriggerEnter 和OnTriggerExit 来发出事件时候就不正确了,因为当一个物体进入触发器 发出了进入的事件,但是它被Deactive了,此时触发器内部没有物体,但是却不会发出退出事件。
我的实现方法是使用一个记时装置,使用协同程序,当触发进入事件
之后打开记时装置,
这个程序的实现为:
IEnumerator ChackTarget() { bool isContinue = true; while(isContinue) { _chackNum -= Time.deltaTime; yield return new WaitForSeconds(Time.deltaTime); if (_chackNum<0) { OnTargetExit(); isContinue = false; } } }
在OnTriggerStay里检测到物体停留就为 _chackNum赋值,当OntriggerStay 不在运行时候,计时器就会不断削减 _chackNum 最后小于0调用退出方法。
对了这个方法说一下,如果在触发器内部有物体的话,这个方法会每一帧被调用一次。
private void OnTriggerEnter(Collider collider) { if (collider.gameObject.layer == Layers.WEAPON_HIT && collider.gameObject.tag == Tags.DAMAGED) { OnTargetEnter(); _chackNum = 1f; StartCoroutine("ChackTarget"); } } private void OnTriggerStay(Collider collider) { if (collider.gameObject.layer == Layers.WEAPON_HIT && collider.gameObject.tag == Tags.DAMAGED) { _chackNum = 1f; } }
0 0
- 碰撞检测 BoxCollider 的特殊实现
- Tiled碰撞检测的实现
- HTML5 Canvas 碰撞检测的简单实现
- Unity实现简单的碰撞检测
- cocos2d滑动碰撞检测的实现
- php中实现矩阵的碰撞检测
- Unity实现简单的碰撞检测
- Unity实现简单的碰撞检测
- cocos2dx碰撞检测实现
- 碰撞检测实现
- CharacterControllerr的碰撞检测
- 理论上的碰撞检测
- QGraphicsScene的碰撞检测
- OgreOpcode轻松实现碰撞检测
- Ogre+Opcode实现碰撞检测
- Ogre+Opcode实现碰撞检测
- PacMan开发-碰撞检测实现
- java 实现精确碰撞检测。
- 交叉编译链制作及调试
- android Java代码中引用字符资源
- ContentProvider使用Demo
- toString()和new String(obj);
- Ant打包android程序步骤,及注意事项
- 碰撞检测 BoxCollider 的特殊实现
- 移动互联网时代,如何免费创建个人专属APP
- url 编码和解码
- R字符串操作
- asp.net fileupload 上传文件错误页面404 解决方法
- CGContext用法详解
- javaFX初探(子场景)
- android Animator详解
- Linux内核同步原语之原子操作