unity中怎么unity判断物体相交一个物体是否在摄像机的视野中

在我的项目中,我采用的是物体遮挡作半透明处理,如果按照上述文章中的思路来写代码的话,那么结果就是当多个物体遮挡角色时,只有第一个物体会半透明,如图:

角色被墙和屋顶遮挡住了,但是可以清楚的看见左下角的墙呈半透明状态,而屋顶依旧不透明

为了解决这个问题,我们不采用上述文章中的 physics.Linecast,在这里我们需要用到 Physics.RaycastAll;使用方法详见圣典

ok,现在我们开始敲代码

我们需要发射一条射线,这条射线从角色当前位置发射置摄像机的方向

 1 /*射线可以从头部起始*/
 3 //这里是计算射线的方向,从主角发射方向是射线机方向
10 //在场景视图中可以看到这条射线
 
 
 

射线发送完毕后,我们获取发送射线时碰撞到的所有物体,并且添加进本次碰撞到的物体(colliderObject)变量中

因为我的地图、护栏碰撞(不可见)、地面碰撞(不可见)是三个模型,也就是说地图本身是没有任何碰撞的

所以当碰撞到的物体名为护栏或地面时,就不修改其透明度,因为他本身就不可见

这里我偷懒了,直接判断物体名称,可自行改为判断物体 tag

当视角旋转的时候,射线有时候会碰撞到角色,所以,我们获取 tag 判断是否碰撞的物体为角色

当获取到所碰撞到的所有物体后,我们要修改他的材质透明度,有些物体有很多材质,不知道怎么解决的请看我下面这个方法:

2 /// 置物体所有材质球颜色 8 //获取当前物体材质球数量 12 //获取当前材质球颜色 18

如果本次碰撞到的物体存在于上个物体,那么则说明当前物体还处于遮挡角色状态,所以我们赋值为null

 1 //上次与本次对比,本次还存在的物体则赋值为null
 
 


还处于遮挡状态的物体已被赋值为null,那么剩下的物体就是没有处于遮挡状态的,所以我们要重置该物体材质为不透明

1 //当值为null时则可判断当前物体还处于遮挡状态
2 //值不为null时则可恢复默认状态(不透明)
 
 

好了,所有代码已完成,我们看一下运行结果

怎么样,有木有感觉很酷炫呢,哈哈哈

最后,附上完整代码链接: 密码:pbrd

刚入门unity3d,现在打算练手让物体运动碰撞的小游戏,一直纠结的一个问题就是摄像机以及物体的位置和角度。

我知道得学图形学的一些知识,感觉图形学东西比较难,而且下学期就开课了,现在只打算学习一点与摄像机和物体位置放置

比如一个空间斜着的物体,想通过计算让它刚好充满屏幕而且显示为平铺角度。

本人手里的是清华大学的《计算机图形学基础教程》教材,求指点一下该了解一下哪一部分??学习之前还需要


刚好下周开入档课,也充实一下自己。

Unity中使用c#判断当前物体是否在移动范围内 [问题点数:30分,无满意结帖,结帖人qq_]

使用高亮效果 判断当前目标是否在可移动范围内如果不在范围内高亮显示为红色 在范围内显示为绿色

屏幕的话,你就要用到shader了,触发器判断,进入范围,就实例化材质球

屏幕的话,你就要用到shader了,触发器判断,进入范围,就实例化材质球
匿名用户不能发表回复!

我要回帖

更多关于 unity判断物体相交 的文章

 

随机推荐