unity 传送门的实现原理
所谓传送门就是从一个地方传送到另一个地方。在游戏中,实现传送门会让人觉得非常神奇。
在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 传送门的实现原理相关推荐
- Unity HDRP烘焙技术原理及应用
您要找的是不是UWA学堂的<Unity HDRP烘焙技术原理及应用>? 文章简介 Unity的HDRP是高清渲染管线(High Definition Render Pipeline)的简称 ...
- unity物理射线之原理分析(擅码网学习笔记)
@[TOC]unity物理射线之原理分析(擅码网学习笔记) using System.Collections; using System.Collections.Generic; using Unit ...
- Unity对象和序列化原理介绍
Unity使用了很多年了,在这里我敢说很多人对Unity对象和序列化原理并不是很清楚,比如Asset与Object之间有啥区别?如何管理Asset?Unity的序列化是咋回事等等,还有在项目中遇到资源 ...
- Unity 的阴影实现原理
目前学习到的unity 渲染阴影的两种方式. 下面情况默认是 前向渲染路径,场景中平行光开启了阴影 方式 原理 备注 ShadowMap 把相机放到光源的位置,那么场景中该光源的阴影区域就是那些相机看 ...
- Unity碰撞检测机制的原理(更新中...)
总是碰到关于碰撞的问题,今天实在忍不住了,来把它搞懂,不然听到八叉树,BSP什么的就怕可不行. 转自:http://www.manew.com/thread-102595-1-1.html 碰撞机制 ...
- Unity 协程的原理
协程不是多线程,协程还是在主线程里面(注:在Unity中非主线程是不可以访问Unity资源的) 1.线程.进程和协程的区别 进程有自己独立的堆和栈,即不共享堆也不共享栈,进程由操作系统调度 线程拥有自 ...
- 【Unity】 Spine渲染原理解析与源码解读
Spine渲染原理解析与源码解读 安装环境 从Spine编辑器导出 将资源导入Unity 基础概念 其他相关概念 Spine架构 Spine运行时的各个模块 有状态(Stateful) 和 无状态(S ...
- 浅析Unity协程实现原理
介绍 协程Coroutine在Unity中一直扮演者重要的角色.可以实现简单的计时器.将耗时的操作拆分成几个步骤分散在每一帧去运行等等,用起来很是方便. 但是,在使用的过程中有没有思考过协程是怎么实现 ...
- Unity 协程(Coroutine)原理与用法详解
前言: 协程在Unity中是一个很重要的概念,我们知道,在使用Unity进行游戏开发时,一般(注意是一般)不考虑多线程,那么如何处理一些在主任务之外的需求呢,Unity给我们提供了协程这种方式 为啥在 ...
最新文章
- 超前探秘首个国产元宇宙百度“希壤”:率先实现10万人同屏互动
- Django博客系统(发表评论)
- lstm PTB语言数据集的处理
- 简单的PHP和MYSQL做投票系统_php mysql简单投票系统
- 数据结构特性解析 (二) ArrayList
- 30秒就能学会一个Python小技巧?
- php7 变量,PHP7变量结构分析
- cmd批量修改文件名 增加文字_Dynamo自动批量化修改文件名称
- 力扣 买卖股票的最佳时机II
- dll编译为html,如何为MSHTML v9编译.dll。我目前正在获取“MIDL 2035:预期的常量表达式”的100个错误...
- 如何理解操作系统的不确定性_如何创造可信任的机器学习模型?先要理解不确定性...
- 用glew,glfw,FreeImage实现opengl学习笔记6坐标变换
- android webview 刷新当前页面,android webview肿么刷新网页
- 【css练习】方格背景
- LInux服务器的基本优化
- 通过python smtplib库添加右抄送和密送人
- 大数据开发薪资水平怎么样?
- 计算机机房线槽,镀锌线槽机房布线的使用方式
- APP瘦身大法--AndResGuard的使用
- 美国麦当劳“四川辣酱”将再次回归;“澳大利亚制造”巧克力要崛起;中国食品行业首个“零碳工厂”诞生 | 食品饮料新品...
热门文章
- 开源html5在线音乐,10 个基于 Web 的 HTML5 音乐播放器
- linux手动安装unzip_Linux安装zip unzip解压工具
- 什么是DCMM,DCMM的等级区分
- Thinking in java 第11章 持有对象 笔记+习题
- “飞行模式”与“离线模式”
- StringBuilder类型
- K-means聚类算法实现分类
- MySQL LOAD DATA导入TXT文件
- 转载:爸妈,如果我嫁不出去了...
- 2022红明谷-部分Crypto