求助,部分unity 射线检测碰撞体不到碰撞

如何在Three.js中检测两个物体是否了发生碰撞 - 推酷
如何在Three.js中检测两个物体是否了发生碰撞
最近在试着用Three.js做一个简单的赛车游戏,里面有一个需要解决的问题是如何判断两个物体发生了碰撞,比如赛车是否碰上了障碍物或者获得了奖励物品。
我找了一些资料,发现了两个示例程序:第一个示例、
以上两个程序都是用
THREE.Raycaster
类来解决问题的。
Raycaster类
应该翻译为“光线投射”,顾名思义,就是投射出去的一束光线。
Raycaster的构造函数如下
Raycaster( origin, direction, near, far ) {
origin — 射线的起点向量。
direction — 射线的方向向量,应该归一化。
near — 所有返回的结果应该比 near 远。Near不能为负,默认值为0。
far — 所有返回的结果应该比 far 近。Far 不能小于 near,默认值为无穷大。
使用Raycaster进行碰撞检测
用Raycaster来检测碰撞的原理很简单,我们需要以物体的中心为起点,向各个顶点(vertices)发出射线,然后检查射线是否与其它的物体相交。如果出现了相交的情况,检查最近的一个交点与射线起点间的距离,如果这个距离比射线起点至物体顶点间的距离要小,则说明发生了碰撞。
这个方法有一个
,当物体的中心在另一个物体内部时,是不能够检测到碰撞的。而且当两个物体能够互相穿过,且有较大部分重合时,检测效果也不理想。
的一点是:在Three.js中创建物体时,它的顶点(veritces)数目是与它的分段数目相关的,分段越多,顶点数目越多。为了检测过程中的准确度考虑,需要适当增加物体的分段。
检测光线是否与物体相交使用的是
intersectObject
intersectObjects
.intersectObject ( object, recursive )
object — 检测该物体是否与射线相交。
recursive — 如果设置,则会检测物体所有的子代。
相交的结果会以一个数组的形式返回,其中的元素依照距离排序,越近的排在越前:
[ { distance, point, face, faceIndex, indices, object }, ... ]
这样通过对数组中的元素进行处理,就能得出想要的结果。
intersectObjects
intersectObject
类似,除了传入的参数是一个数组之外,并无大的差别。
检测碰撞的代码片段
功能:检测 movingCube 是否与数组 collideMeshList 中的元素发生了碰撞
var originPoint = movingCube.position.clone();
for (var vertexIndex = 0; vertexIndex & movingCube.geometry.vertices. vertexIndex++) {
// 顶点原始坐标
var localVertex = movingCube.geometry.vertices[vertexIndex].clone();
// 顶点经过变换后的坐标
var globalVertex = localVertex.applyMatrix4(movingCube.matrix);
// 获得由中心指向顶点的向量
var directionVector = globalVertex.sub(movingCube.position);
// 将方向向量初始化
var ray = new THREE.Raycaster(originPoint, directionVector.clone().normalize());
// 检测射线与多个物体的相交情况
var collisionResults = ray.intersectObjects(collideMeshList);
// 如果返回结果不为空,且交点与射线起点的距离小于物体中心至顶点的距离,则发生了碰撞
if (collisionResults.length & 0 && collisionResults[0].distance & directionVector.length()) {
// crash 是一个标记变量
在Three.js中是使用矩阵来记录3D转换的,每一个Object3D的实例都有一个矩阵,存储了位置position,旋转rotation和伸缩scale。
var globalVertex = localVertex.applyMatrix4(movingCube.matrix);
这一句代码将物体的本地坐标乘以变换矩阵,得到了这个物体在世界坐标系中的值,处理之后的值才是我们所需要的。
我的示例代码
Online Demo 按方向键移动方块,点击鼠标左键并拖动更改视角。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致君,已阅读到文档的结尾了呢~~
广告剩余8秒
文档加载中
射线检测问答题,射线检测,x射线检测,unity 射线检测,x射线检测仪器,射线检测 doc下载,unity3d 射线检测,x射线检测仪,问答题,搞笑问答题,莽荒纪问答题
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
射线检测问答题
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口关于射线检测的问题,求帮忙_unity3d吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:66,010贴子:
关于射线检测的问题,求帮忙收藏
collider.enabled =
RaycastHit2D hit =
Physics2D.Linecast(currentPos, targetPos);
collider.enabled =
Debug.Log(hit.transform.gameObject);我已经在检测前把自身的Collider禁用了,为啥还是检测碰撞到自己
火星时代作为专业unity3d研发培训机构,依靠多年游戏教学实力,让您快速成为u3d工程师.毕业月薪&12000起&.详情请点击&&&
设置layermask
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或射线检测选择题(一)(含答案)_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
射线检测选择题(一)(含答案)
上传于|0|0|暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩6页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢

我要回帖

更多关于 unity 2d射线碰撞检测 的文章

 

随机推荐