知乎专栏:游戏开发入门指南——Unity+
https://zhuanlan.zhihu.com/gdguide

大家好。

接下来的两篇内容,是用Unity来做传送门的效果。这里是用自己的方法来做的,中途踩了许多坑不过最终还是实现了。下面是效果图:

本篇文章几乎没有代码。主要是介绍一下实现的原理。

不看code的感觉是不是很爽

先不说如何打开传送门以及如何在传送门中穿梭的问题,我们先来看看摄像机是怎样将场景及主角从另一个角度渲染进门里面的。

在现实生活中,如果把眼睛比作主摄像机,人的眼睛是不能直接看见自己的侧面的,如果一定要看则会用另外的摄像头从侧面对自己进行拍摄,再吧显示器材放在视线范围内,这样就能实时的去观察自己的侧面了。同样的道理,要达到上图中的效果,一个摄像机是肯定不够的,需要其它的摄像机来辅助。

来看看我们的场景,场景很简单,就是一个墙面的地面组成的,当传送门打开时,就让该处的墙暂时禁用:

让主摄像机作为主角的眼睛始终跟随主角移动,如果主摄像机从传送门看出去,门里其实是什么都没有的:

那么这段“空白”就需要填补,刚才我们提到了其它的摄像机,就是用来填补这个空白的。

在效果展示中,主角从橙色门中由内而外看出去,是和辅助摄像机从蓝色门由外到内看进来的画面是一样的:

所以只要将辅助摄像机看到的画面拿来填补主摄像机的空缺就可以了,二手手机转让前提是主摄像机的渲染层级更高,我们对主摄像机的属性进行设置:

但是要真正的无缝衔接则对摄像机的位置关系有一定的要求,也就是说主摄像机与橙色门的位置关系同辅助摄像机与蓝色门的位置关系必须是一致的:

要让辅助摄像机的位置同步,我们可以创建一个空物体,取名叫Substitute,让它成为橙色门的子物体,再创建一个辅助摄像机,取名Camera_1,的视锥范围要和主摄像机一样,但渲染层级较低,将Camera_1作为蓝色门的子物体:

注意这里为了方便理解使用了中文,在实际开发中请避免使用中文命名。

通过代码让Substitute实时获取主摄像机的世界坐标的位置与旋转,再将本地坐标赋给Camera_1,这样辅助摄像机与蓝色门的位置和主角与橙色门的位置就会保持同步:

  1. //获取主摄像机世界位置和旋转
  2. substitute.position=mainCamera.position;
  3. substitute.rotation=mainCamera.rotation;
  4. //将本地位置和旋转赋给辅助摄像机
  5. camera_1.localPosition=substitute.localPosition;
  6. camera_1.localRotation=substitute.localRotation;

复制代码

同样的方法,再创建一个替身和辅助摄像机,也可以用来渲染蓝色门内的场景:

第三层空间的渲染

如果把主场景成为第一层空间,传送门看进去的是第二层,那么上图中红框内渲染的就是第三层。做到第三层空间的渲染,其实还是和渲染第二层一样的原理,创建渲染第三层空间的辅助摄像机Camera_2:

Camera_1与橙色门的位置关系,就是Camera_2与蓝色门的位置关系。

同样颜色的线代表相同的位置关系

同样的方法,将第三层的另一个摄像机也创建好,我们来看三层空间的效果展示:

这样就保持着三层空间的渲染,当然也可以再继续往下发展,除第一层空间外,每层都需要两个摄像机,方法都是一样,越往下层的摄像机渲染层级越低,例如主摄像机的层级为0,那么第二层空间的两个摄像机分别为-1和-2,第三层为-3和-4,且最低的摄像机的ClearFlags选项要设为Skybox或者SolidColor,其它所有摄像机都设置为Depth only。

层级最低的摄像机

而每个辅助摄像机都需要一个Substitute来帮助定位,如果要渲染三层空间,就一共需要四个Substitute(四个辅助摄像机)。

本期文章内容不多,主要是介绍了传送门的制作原理。当大家理解之后,在下一期中将会正式介绍物体在门中穿梭的实现方法,届时会少不了代码,并且同时会介绍过程中会遇到的许多坑。

每个坑都是一行泪

用Unity实现传送门效果(一)相关推荐

  1. 用Unity实现传送门效果

    大家好. 接下来的两篇内容,是用Unity来做传送门的效果.这里是用自己的方法来做的,中途踩了许多坑不过最终还是实现了.下面是效果图: 前半段内容几乎没有代码.主要是介绍一下实现的原理. 先不说如何打 ...

  2. Unity 之 ShaderGraph 实现旋涡(传送门)效果入门级教程

    Unity 之 ShaderGraph 实现旋涡[传送门]效果入门级教程 一,最终效果展示 二,创建PBRGraph 三,实现原理介绍 四,完整效果实现 五,应用到场景中 若你的工程还没有进行基础配置 ...

  3. Unity中用shader graph制作一个简单的传送门效果

    Unity中用shader graph制作一个简单的传送门效果 一.配置渲染管线 1.通过菜单"Asset" --> "Create" --> &q ...

  4. unity 条目换位效果_Unity AI主题博客条目

    unity 条目换位效果 Welcome to the first of Unity's new AI-themed blog entries! We have set up this space a ...

  5. Unity 实现贴花效果的制作教程

    c#教程​https://www.cnblogs.com/Yesi/p/15829200.html ​ 有些游戏中的战斗痕迹的效果会通过贴花来实现的,贴花的方式多种多样.而在Unity中,有一种给官方 ...

  6. unity气流模拟效果

    机房气流模拟效果 参考 效果展示: 资源链接:unity气流模拟效果-Unity3D文档类资源-CSDN下载

  7. 用Unity实现景深效果

    用Unity实现景深效果 景深也是一种非常常见的后处理手段,它用来模拟相机拍摄画面的效果.今天我们讨论如何在Unity中实现它. 简单来说,景深效果可以拆分为两个部分,一个部分是聚焦,使画面中指定的区 ...

  8. Unity 翻书效果

    Unity翻书效果 目前做的VR项目中需要一个翻阅魔法书的效果,考虑过使用UnityBookPageCurl-master插件,但是那个插件是纯UI显示的,只有二维效果,在VR里观感不佳,之后在网上找 ...

  9. Unity时光倒流效果实现

    Unity时光倒流效果实现<25/11/2017> 场景:一个Panel,一个由众多小Cube堆叠而成的巨大Cube,巨大Cube中心放置爆炸点Bomb. 实现方式:一共就三个脚本,每个C ...

最新文章

  1. mysql timestamp类型字段 自动更新为当前时间
  2. MVC ScriptBundle自定义排序。
  3. 国考临近——送给奔跑在国考路上的人的一些话
  4. 《Advanced .NET Debugging》 读书笔记 Listing 3-2: 如何查看程序的PID
  5. P3242 [HNOI2015] 接水果(整体二分、扫描线)
  6. 项目背景怎么描述_产品经理写简历,如何让「项目经验」更出众?
  7. 删库不跑路,详解MySQL数据恢复
  8. Hibernate学习(四)
  9. 马哥linux-多年内部专用电子书,马哥linux-多年积累-无价之宝books haproxy.pdf
  10. kali破解wifi 密码(仅供学习)
  11. Android会议室管理app
  12. 快手Y-tech:短视频智能创作的CV技术和发展趋势
  13. 直角坐标系与极坐标系了解与转换
  14. Python-在线网页导出为图片或pdf
  15. 嵌入式接口之TIM定时器与NVIC的STM32模板库函数的一些解释
  16. 微信小程序|使用小程序制作一个马赛克处理工具
  17. Lodash是如何实现深拷贝的
  18. 洛谷是什么?hydro是什么
  19. UnityEditor查找引用和批量替换资源工具
  20. Linux命令之ifconfig命令

热门文章

  1. mysql 4.0.21 下载_W2K下安装 MYSQL 4.0.21 手记
  2. 点击button时候传递一个参数实现局部刷星_Tkinter的一个小小的规则,如果不了解,可能不会解决掉这个问题...
  3. D3js(一): d3js和DOM
  4. Mysql8- Public Key Retrieval is not allowed
  5. .Net软件测试指南 第一章 用.net自动测试软件
  6. HDU - 1827 Summer Holiday (强连通)
  7. vue 打包体积过大 实现懒加载 ????
  8. linux禁用锁定和解除解锁用户账号的方法
  9. 关于ionic的一些坑(3)
  10. hdu5343 后缀自动机+dp