网站大量收购闲置独家精品文档,联系QQ:2885784924

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

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

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

在我的工程中,我承受的是物体遮挡作半透亮处理,假设依据上述文章中的思路来写代码的话,那么结果就是当多个物体遮挡角色时,只有第一个物体会半透亮,如图:角色被墙和屋顶遮挡住了,但是可以清楚的观察左下角的墙呈半透亮状态,而屋顶照旧不透亮

在我的工程中,我承受的是物体遮挡作半透亮处理,假设依据上述文章中的思路来写代码

的话,那么结果就是当多个物体遮挡角色时,只有第一个物体会半透亮,如图:

角色被墙和屋顶遮挡住了,但是可以清楚的观察左下角的墙呈半透亮状态,而屋顶照旧不

透亮

fontface=“宋体“size=“2“usingSystem.Collections.Generic;//引入命名

在看此文章时请先看上面的参考文章。更多精彩请关注【狗刨学习网】

看完以上文章后,你或许会想人家都已经给出全部代码了,你还写个毛啊

看完以上文章后,你或许会想人家都已经给出全部代码了,你还写个毛啊别急,现在进入主题

为了解决这个问题,我们不承受上述文章中的

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

ok,现在我们开头敲代码

ok,现在我们开头敲代码

首先,我们引入命名空间

首先,我们引入命名空间System.Collections.Generic,然后在声明三个需要用到的变

1.

空间

空间

2.

public

publicclassMyCamera1:MonoBehaviour

4.{

//观看目标

//观看目标

public

publicTransformTarget;

7.

//上次碰撞到的物体

//上次碰撞到的物体

private

privateListGameObjectlastColliderObject;

10.

//本次碰撞到的物体

//本次碰撞到的物体

private

privateListGameObjectcolliderObject;

}/font13.

}/font

复制代码

复制代码

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

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

1.

fontface=“宋体“

font

face=“宋体“size=“2“/*射线可以从头部起始*/

2

3

//这里是计算射线的方向,从主角放射方向是射线机方向

4

Vector3aim=Target.position;

5

//得到方向

6

Vector3 ve = (Target.position

-

3.

4.

5.

6.

transform.position).normalized;

transform.position).normalized;

7.

7float

7

floatan=transform.eulerAngles.y;

8

aim-=an*ve;

99.

9

10//

10

//在场景视图中可以看到这条射线

11//Debug.DrawLine(target.position,

11

//Debug.DrawLine(target.position,aim,Color.red);

1212.

12

13RaycastHit[]

13

RaycastHit[]hit;

14hit=

14

hit=Physics.RaycastAll(Target.position,aim,100f);//起始位

复制代码

置、方向、距离

置、方向、距离/font

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

射线发送完毕后,我们猎取发送射线时碰撞到的全部物体,并且添加进本次碰撞到的物体

(colliderObject)变量中

由于我的地图、护栏碰撞(不行见)、地面碰撞(不行见)是三个模型,也就是说地图本身是

没有任何碰撞的

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

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

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

为角色

font

fontface=“宋体“size=“2“1

//将colliderObject中全部的值添加

进lastColliderObject

2.

2for

2

for(inti=0;icolliderObject.Count;i++)

3

lastColliderObject.Add(colliderObject[i]);

44.

4

文档评论(0)

137****4005 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档