所谓传送门就是从一个地方传送到另一个地方。在游戏中,实现传送门会让人觉得非常神奇。

在unity 我们使用一个面片在当做传送门,要把远处一个场景的画面投到面片上。 可以使用摄像机的TargerTexture 属性。

1.在资源文件夹创建   RenderTexture, 然后拖拽到相机的 TargerTexture属性。    再将    RenderTexture贴到面片上。  即可在面片上看到该摄像机视角的画面。

这种方式也可以用来做小地图功能。

2.到这里还不够,因为光看到画面还不行。  假设你站在门外,朝门里看,自身发生位移的时候,看到的门里的画面范围也会跟着变,这才是真实的效果。

我们把放在远处的摄像机作为目标端摄像机,  那么当前玩家的摄像机应该正视这个面片。 需要 远端的摄像机能够跟玩家的摄像机有相同的位移以及旋转。这样面片上的画面的视角才能跟玩家一致。

这里 需要用到一个 方法。

(1)

public Vector3 MultiplyPoint(Vector3 point);

Description

Transforms a position by this matrix (generic).

可以将目标点进行坐标系转换。

将玩家在世界坐标的坐标点,转化为以传送门为坐标系的坐标。

然后将远端摄像机挂到一个空物体下,该空物体模拟远端传送门出口的点。     将上述得到的坐标点    赋值给远端摄像机。即可同步两个摄像机。

为了让面片的视角刚好符合玩家的视角,还需要将远端相机的近截面改到  相对与玩家视角的门的位置。

实现代码如下

private void Update(){CurrentPos = player.transform.position;var mt = Render.worldToLocalMatrix;PortalCamera.transform.localPosition = mt.MultiplyPoint(CurrentPos);PortalCamera.transform.LookAt(PortalPoint);PortalCamera.nearClipPlane = -PortalCamera.transform.localPosition.z;const float renderHeight = 1.5f;PortalCamera.fieldOfView = 2 * Mathf.Atan(renderHeight / 2 / PortalCamera.nearClipPlane) * Mathf.Rad2Deg;}

unity 传送门的实现原理相关推荐

  1. Unity HDRP烘焙技术原理及应用

    您要找的是不是UWA学堂的<Unity HDRP烘焙技术原理及应用>? 文章简介 Unity的HDRP是高清渲染管线(High Definition Render Pipeline)的简称 ...

  2. unity物理射线之原理分析(擅码网学习笔记)

    @[TOC]unity物理射线之原理分析(擅码网学习笔记) using System.Collections; using System.Collections.Generic; using Unit ...

  3. Unity对象和序列化原理介绍

    Unity使用了很多年了,在这里我敢说很多人对Unity对象和序列化原理并不是很清楚,比如Asset与Object之间有啥区别?如何管理Asset?Unity的序列化是咋回事等等,还有在项目中遇到资源 ...

  4. Unity 的阴影实现原理

    目前学习到的unity 渲染阴影的两种方式. 下面情况默认是 前向渲染路径,场景中平行光开启了阴影 方式 原理 备注 ShadowMap 把相机放到光源的位置,那么场景中该光源的阴影区域就是那些相机看 ...

  5. Unity碰撞检测机制的原理(更新中...)

    总是碰到关于碰撞的问题,今天实在忍不住了,来把它搞懂,不然听到八叉树,BSP什么的就怕可不行. 转自:http://www.manew.com/thread-102595-1-1.html 碰撞机制 ...

  6. Unity 协程的原理

    协程不是多线程,协程还是在主线程里面(注:在Unity中非主线程是不可以访问Unity资源的) 1.线程.进程和协程的区别 进程有自己独立的堆和栈,即不共享堆也不共享栈,进程由操作系统调度 线程拥有自 ...

  7. 【Unity】 Spine渲染原理解析与源码解读

    Spine渲染原理解析与源码解读 安装环境 从Spine编辑器导出 将资源导入Unity 基础概念 其他相关概念 Spine架构 Spine运行时的各个模块 有状态(Stateful) 和 无状态(S ...

  8. 浅析Unity协程实现原理

    介绍 协程Coroutine在Unity中一直扮演者重要的角色.可以实现简单的计时器.将耗时的操作拆分成几个步骤分散在每一帧去运行等等,用起来很是方便. 但是,在使用的过程中有没有思考过协程是怎么实现 ...

  9. Unity 协程(Coroutine)原理与用法详解

    前言: 协程在Unity中是一个很重要的概念,我们知道,在使用Unity进行游戏开发时,一般(注意是一般)不考虑多线程,那么如何处理一些在主任务之外的需求呢,Unity给我们提供了协程这种方式 为啥在 ...

最新文章

  1. 超前探秘首个国产元宇宙百度“希壤”:率先实现10万人同屏互动
  2. Django博客系统(发表评论)
  3. lstm PTB语言数据集的处理
  4. 简单的PHP和MYSQL做投票系统_php mysql简单投票系统
  5. 数据结构特性解析 (二) ArrayList
  6. 30秒就能学会一个Python小技巧?
  7. php7 变量,PHP7变量结构分析
  8. cmd批量修改文件名 增加文字_Dynamo自动批量化修改文件名称
  9. 力扣 买卖股票的最佳时机II
  10. dll编译为html,如何为MSHTML v9编译.dll。我目前正在获取“MIDL 2035:预期的常量表达式”的100个错误...
  11. 如何理解操作系统的不确定性_如何创造可信任的机器学习模型?先要理解不确定性...
  12. 用glew,glfw,FreeImage实现opengl学习笔记6坐标变换
  13. android webview 刷新当前页面,android webview肿么刷新网页
  14. 【css练习】方格背景
  15. LInux服务器的基本优化
  16. 通过python smtplib库添加右抄送和密送人
  17. 大数据开发薪资水平怎么样?
  18. 计算机机房线槽,镀锌线槽机房布线的使用方式
  19. APP瘦身大法--AndResGuard的使用
  20. 美国麦当劳“四川辣酱”将再次回归;“澳大利亚制造”巧克力要崛起;中国食品行业首个“零碳工厂”诞生 | 食品饮料新品...

热门文章

  1. 开源html5在线音乐,10 个基于 Web 的 HTML5 音乐播放器
  2. linux手动安装unzip_Linux安装zip unzip解压工具
  3. 什么是DCMM,DCMM的等级区分
  4. Thinking in java 第11章 持有对象 笔记+习题
  5. “飞行模式”与“离线模式”
  6. StringBuilder类型
  7. K-means聚类算法实现分类
  8. MySQL LOAD DATA导入TXT文件
  9. 转载:爸妈,如果我嫁不出去了...
  10. 2022红明谷-部分Crypto