电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

unity3d 摄像机跟随角色时被物体遮挡解决方案VIP免费

unity3d 摄像机跟随角色时被物体遮挡解决方案_第1页
1/6
unity3d 摄像机跟随角色时被物体遮挡解决方案_第2页
2/6
unity3d 摄像机跟随角色时被物体遮挡解决方案_第3页
3/6
在看此文章时请先看上面的参考文章。更多精彩请关注【狗刨学习网】看完以上文章后,你也许会想人家都已经给出所有代码了,你还写个毛啊别急,现在进入主题在我的项目中,我采用的是物体遮挡作半透明处理,如果按照上述文章中的思路来写代码的话,那么结果就是当多个物体遮挡角色时,只有第一个物体会半透明,如图:角色被墙和屋顶遮挡住了,但是可以清楚的看见左下角的墙呈半透明状态,而屋顶依旧不透明为了解决这个问题,我们不采用上述文章中的physics.Linecast,在这里我们需要用到Physics.RaycastAll;使用方法详见圣典ok,现在我们开始敲代码首先,我们引入命名空间System.Collections.Generic,然后在声明三个需要用到的变量1.usingSystem.Collections.Generic;//引入命名空间2.3.publicclassMyCamera1:MonoBehaviour4.{5.//观察目标6.publicTransformTarget;7.8.//上次碰撞到的物体9.privateListlastColliderObject;10.11.//本次碰撞到的物体12.privateListcolliderObject;13.}复制代码我们需要发射一条射线,这条射线从角色当前位置发射置摄像机的方向1./*射线可以从头部起始*/2.23.3//这里是计算射线的方向,从主角发射方向是射线机方向4.4Vector3aim=Target.position;5.5//得到方向6.6Vector3ve=(Target.position-transform.position).normalized;7.7floatan=transform.eulerAngles.y;8.8aim-=an*ve;9.910.10//在场景视图中可以看到这条射线11.11//Debug.DrawLine(target.position,aim,Color.red);12.1213.13RaycastHit[]hit;14.14hit=Physics.RaycastAll(Target.position,aim,100f);//起始位置、方向、距离复制代码射线发送完毕后,我们获取发送射线时碰撞到的所有物体,并且添加进本次碰撞到的物体(colliderObject)变量中因为我的地图、护栏碰撞(不可见)、地面碰撞(不可见)是三个模型,也就是说地图本身是没有任何碰撞的所以当碰撞到的物体名为护栏或地面时,就不修改其透明度,因为他本身就不可见这里我偷懒了,直接判断物体名称,可自行改为判断物体tag当视角旋转的时候,射线有时候会碰撞到角色,所以,我们获取tag判断是否碰撞的物体为角色1.1//将colliderObject中所有的值添加进lastColliderObject2.2for(inti=0;i复制代码当获取到所碰撞到的所有物体后,我们要修改他的材质透明度,有些物体有很多材质,不知道怎么解决的请看我下面这个方法:1.1///置物体所有材质球颜色2.2///置物体所有材质球颜色3.3///4.4///材质5.5///透明度6.6privatevoidSetMaterialsColor(Renderer_renderer,floatTranspa)7.7{8.8//获取当前物体材质球数量9.9intmaterialsNumber=_renderer.sharedMaterials.Length;10.10for(inti=0;i复制代码如果本次碰撞到的物体存在于上个物体,那么则说明当前物体还处于遮挡角色状态,所以我们赋值为null1.

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

unity3d 摄像机跟随角色时被物体遮挡解决方案

确认删除?
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群