- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
unity3d摄像机跟随角色时被物体遮挡解决方案
在看此文章时请先看上面的参考文章。更多精彩请关注
? ???看完以上文章后,你也许会想人家都已经给出所有代码了,你还写个毛啊
? ???别急,现在进入主题
? ???在我的项目中,我采用的是物体遮挡作半透明处理,如果按照上述文章中的思路来写代码的话,那么结果就是当多个物体遮挡角色时,只有第一个物体会半透明,如图:
? ?? ?角色被墙和屋顶遮挡住了,但是可以清楚的看见左下角的墙呈半透明状态,而屋顶依旧不透明
? ?? ?为了解决这个问题,我们不采用上述文章中的 physics.Linecast,在这里我们需要用到 Physics.RaycastAll;使用方法详见圣典
? ?? ?ok,现在我们开始敲代码
? ?? ?首先 ,我们引入命名空间 System.Collections.Generic,然后在声明三个需要用到的变量
font face=新宋体 size=2using System.Collections.Generic;//引入命名空间
public class MyCamera1 : MonoBehaviour
{
? ? //观察目标
? ? public Transform Target;
? ? //上次碰撞到的物体
? ? private ListGameObject lastColliderObject;
? ? //本次碰撞到的物体
? ? private ListGameObject colliderObject;
}/font
复制代码
? ?? ? 我们需要发射一条射线,这条射线从角色当前位置发射置摄像机的方向
font face=新宋体 size=2 /*射线可以从头部起始*/
2?
3? ?? ?? ?//这里是计算射线的方向,从主角发射方向是射线机方向
4? ?? ?? ?Vector3 aim = Target.position;
5? ?? ?? ?//得到方向
6? ?? ?? ?Vector3 ve = (Target.position - transform.position).normalized;
7? ?? ?? ?float an = transform.eulerAngles.y;
8? ?? ?? ?aim -= an * ve;
9?
10? ?? ?? ?//在场景视图中可以看到这条射线
11? ?? ?? ?//Debug.DrawLine(target.position, aim, Color.red);
12?
13? ?? ?? ?RaycastHit[] hit;
14? ?? ?? ?hit = Physics.RaycastAll(Target.position, aim, 100f);//起始位置、方向、距离/font
? ???射线发送完毕后,我们获取发送射线时碰撞到的所有物体,并且添加进本次碰撞到的物体(colliderObject)变量中
? ???因为我的地图、护栏碰撞(不可见)、地面碰撞(不可见)是三个模型,也就是说地图本身是没有任何碰撞的
? ???所以当碰撞到的物体名为护栏或地面时,就不修改其透明度,因为他本身就不可见
? ???这里我偷懒了,直接判断物体名称,可自行改为判断物体 tag
? ???当视角旋转的时候,射线有时候会碰撞到角色,所以,我们获取 tag 判断是否碰撞的物体为角色
font face=新宋体 size=2 1? ?? ?? ?//将 colliderObject 中所有的值添加进 lastColliderObject
2? ?? ?? ?for (int i = 0; i colliderObject.Count; i++)
3? ?? ?? ?? ? lastColliderObject.Add(colliderObject[i]);
4?
5? ?? ?? ?colliderObject.Clear();//清空本次碰撞到的所有物体
6? ?? ?? ?for (int i = 0; i hit.Length; i++)//获取碰撞到的所有物体
7? ?? ?? ?{
8? ?? ?? ?? ? if (hit[i].collider.gameObject.name != Editable Poly 1//护栏
9? ?? ?? ?? ?? ??? hit[i].collider.gameObject.name != Editable Poly//地面
10? ?? ?? ?? ?? ??? hit[i].collider.gameObject.tag != Player)//角色
11? ?? ?? ?? ? {
12? ?? ?? ?? ?? ???//Debug.Log(hit[i].collide
您可能关注的文档
- SKFCR油封,CR17387尺寸结构参数.doc
- SketchUp打开变慢解决方法.doc
- SMPQC-1003QC实验室温湿度控制标准管理规程.doc
- SIMR1201救生设备维护保养手册.doc
- Solidwork2009针对螺纹装饰线无法显示问题处理.doc
- SL机场机坪考试题.docx
- SOP090012(04-2)洁净区工作服工作鞋收集清洗烘干灭菌发放标准操作规程.doc
- SnapAssure常见故障维护手册.doc
- SONYVIAOSZ系列拆机攻略.doc
- SIMULIA-测试案例方案1.doc
- DB44_T+2767-2025河口海湾总氮、总磷水质评价指南.docx
- 中医药科技成果转化评价技术规范.docx
- DB44_T+2750-2025农村供水工程数字化建设技术导则.docx
- DB44_T+2769-2025金属矿山生态修复技术规范.docx
- 镁合金航天航空零部件长效防护微弧氧化膜层工艺规范.docx
- 《甘青青兰中绿原酸和胡麻苷含量的测定 高效液相色谱法》发布稿.pdf
- DB44_T+753-2025声环境质量自动监测技术规范.docx
- 信息技术 智算服务 异构算力虚拟化及池化系统要求.docx
- DB44_T+2759-2025黄荆栽培技术规程.docx
- 废生物制药溶媒再生乙腈.docx
原创力文档


文档评论(0)