2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > unity 传送门的实现原理

unity 传送门的实现原理

时间:2019-02-16 02:49:15

相关推荐

unity 传送门的实现原理

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

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

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

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

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

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

这里 需要用到一个 方法。

(1)

publicVector3MultiplyPoint(Vector3point);

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;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。