Unity 碰撞检测
武器与怪物的碰撞
目前来说有三种思路,其实前两种算变种了:
1、动画关键帧回调 + 范围检测。http://blog.csdn.net/u013700908/article/details/52888792
这个是在Asset store上面下的一个例子中看到的,其实之前在做端游时,也差不多是这样做的,就是挥武器的动作到某一帧的时候,计算武器位中心的范围内有木有怪物,有的话,就给这个目标添加伤害。范围检测用到的函数是这个:
Physics.OverlapSphere
Returns an array with all colliders touching or inside the sphere.
这个方法其实对于大部分游戏来说是足够了,性能上也没有什么开销。
2、动画关键帧回调 + 线性检测。
这个是从下面这位同学这里看到的哈,思路就是在武器的运动轨迹上选几个点,然后在这几个点上做线性检测。感觉这个比较适合做拿斧子横向砍一刀哈。
http://blog.sina.com.cn/s/blog_8373d8f00101989i.html
不过我觉得不必要向上面的链接里面说的,每帧都取值来算,可以在动画设置几个关键帧,然后记录当前关键帧的点和上一个关键帧的点做射线检测。用到的函数是这个:
Physics.Linecast
Returns true if there is any collider intersecting the line between start and end.
3、碰撞体回调
给武器上挂一个空的GameObject,然后给这个GameObject挂上一个Collider(勾选山IsTrigger)和RigidBody,然后监听void OnTriggerEnter( Collider other )事件。
我这次做的这个Demo也就是用的这种哈,没有大规模的测试,只是做了一个Demo,据网上说这个会有性能上的开销,以后有机会测试一下。
2、
碰撞检测
首先,我们得明确一点:即产生碰撞信息所需要的条件。事实上,在U3D中,能检测碰撞发生的方式有两种,一种是利用碰撞器,另一种则是利用触发器。这两种方式的应用非常广泛。为了完整的了解这两种方式,我们必须理解以下概念:
(一)碰撞器是一群组件,它包含了很多种类,比如: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.Static Collider 静态碰撞器
指的是没有附加刚体而附加了碰撞器的游戏对象。这类对象会保持静止或很轻微的移动。这对于环境模型十分好用,比如刚体和墙面碰撞时而不会移动。
2.Rigidbody Collider 刚体碰撞器
指的是附加了刚体和碰撞器的游戏对象。
3.Kinematic Rigidbody Collider 运动学刚体碰撞器
在第2点得基础上勾选了刚体组件中的IsKinematic属性,如果要移动这类对象,就只能修改它的Transform,而不是用力。这类游戏对象还有许多其他的独特的使用情景。
这三种碰撞器如果勾选了IsTrigger复选框,就变成了相应的触发器了。
两个碰撞器要想检测到碰撞信息,至少有一个是Rigidbody Collider。
两个注意
注意1:两个物体发生碰撞,如果要检测到碰撞信息,那么其中必有一个物体既带有碰撞器,又带有刚体,且检测碰撞信息的脚本必须附着在带有刚体的碰撞器上。
注意2:两个GameObject发生碰撞,要想检测到触发信息,最少要有一个刚体碰撞器并且勾选了IsTrigger复选框,另一个最少要有一个碰撞器组件,此时检测碰撞的脚本必须附加在那个带有刚体的触发器上。
http://blog.sina.com.cn/s/blog_947a2cdd0102uz1k.html
- }
Unity 碰撞检测的更多相关文章
- Unity碰撞检测
2019独角兽企业重金招聘Python工程师标准>>> 我们在用unity做开发的时候,会遇到要用到碰撞检测的问题,比如说,物体撞到墙壁,子弹打到物体等等,所以这里简单介绍一下uni ...
- Unity 碰撞检测中碰撞器与触发器的区别
要产生碰撞必须为游戏对象添加刚体(Rigidbody)和碰撞器,刚体可以让物体在物理影响下运动.碰撞体是物理组件的一类,它要与刚体一起添加到游戏对象上才能触发碰撞.如果两个刚体相互撞在一起,除非两个对 ...
- Unity 碰撞检测 OnTriggerEnter 入门
当我们需要检测两个物体A和B发生碰撞的时候,必须要满足一下条件 1:A和B必须有碰撞边界,你可以点开一个A,在属性窗口点击AddComponent,在physis(物理)目录下看到以下这些 ,根据形状 ...
- unity碰撞检测(耗费性能)
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PengZhua ...
- unity射线碰撞检测+LayerMask的使用
射线在unity中是个很方便的东西,对对象查找.多用于碰撞检测(如:子弹飞行是否击中目标).角色移动等提供了很大的帮助,在此做个总结与大家分享下 ,若有不足欢迎吐槽 好了,话补多说啦,直接进入主题: ...
- 【Unity入门】碰撞检测与触发检测
版权声明:本文为博主原创文章,转载请注明出处. 在Unity里面,游戏物体的碰撞我们可以通过刚体组件(Rigidbody)和碰撞器组件(Collider)来进行检测.首先在场景里面添加一个Plane面 ...
- Unity Layout碰撞检测
第一次看到LayerMask根本不知道是什么东东,后来问问度娘,看了几篇文章,终于看明白一点点,在网上看到各路大神的解释,终于明白了,LayerMask实际上是一个位码操作,在Unity3d中Laye ...
- 使用Unity中的Box Collider组件完成游戏场景中的碰撞检测功能
一.介绍 目的:通过Unity自带的组件完成游戏场景中的碰撞检测功能. 软件环境:Unity 2017.3.0f3 二.实现过程 1,在面板中点击Add Component按钮 2,添加Box Col ...
- Unity学习-碰撞检测(七)
Unity脚本说明 Unity支持语言: C#(主流),JavaScript,Boo 创建脚本: [Assets-Create-C# Script] 学习案例 布置场景: 添加一个Plane,3个Cu ...
随机推荐
- 【洛谷4009】汽车加油行驶问题(SPFA乱搞)
点此看题面 大致题意:给定一个\(N*N\)的方形网格,其中1表示这个格子有油库,0表示这个格子没油库,且汽车加满油可以行驶\(k\)条网格边.如果遇到油库必须加满油并花费\(A\)元,如果\(X\) ...
- 爬虫学习(八)——带cookie的网页进行爬取
# 前提:# # 通常,很多网站需要登录才能进行浏览,所以在爬取这些网站时,也需要进行登录,并拿取登录时的cookie# # 登录网页,服务器会给客户端一个牌子cookie# # 访问登录页面时,带着 ...
- 文档处理jQuery,实现添加删除复制
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- jquery实现全选、取消反选、加JavaScript三元运算(三种法法实现反选)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Apache 错误日志
配置文件中:httpd.conf ErrorLog "/usr/local/var/log/apache2/error_log1" CustomLog "/usr/loc ...
- rsyn远程自动同步
rsync是远程自动同步工具,同时也能实现本地文件的复制,能够实现cp ,scp的功能,但是在远程同步上rsync要scp高效,因为scp能实现增量传输,每次都得全量传输,如果传输大文件时会很消耗网络 ...
- 微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js)
微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞 ...
- 5-1 json模块
1.json.loads(json_str) 把字符串(json串)转成字典 import json # 解析json的 json_str = ''' {"name":" ...
- ECMAScript 6入门扩展笔记
字符串扩展 Unicode相关补充 引入"\u{xx}"来表示码点,之前只能表示\u0000-\uffff引入String.fromCodePoint()能正确读取大于uFFFF的 ...
- JZOJ 5184. 【NOIP2017提高组模拟6.29】Gift
5184. [NOIP2017提高组模拟6.29]Gift (Standard IO) Time Limits: 1000 ms Memory Limits: 262144 KB Detailed ...