Skip to main content

第二部分:一张基本的地图

总之,我们需要一个地图,而且它得能够实时运行,否则就没什么意义了。

  • 制作一个能够实时运行地图

基本的平面地图


获取地图信息

当我们需要地图的时候,不外乎就是想要知道一些关于周围环境的信息而已。比如说查看周围的地形和建筑,确定位置,寻找道路等。无论你具体为什么需要地图,这张地图都必须能够呈现出你周围环境的情况,所以我们需要一种获取周围环境的信息的办法。

在地图的例子中,就是能够看到周围的环境,就是获取周围环境的画面。除此之外,地图一般都是俯视角,从上往下看,所以我们要获取的画面还得是从上往下的。

为了获取画面,我们需要使用摄像机(Camera)组件,将摄像机放在高空,从上往下摄录,这样就能获取到高空俯视角的画面了。

在 VRChat 中,只有你的好友,以及任何特别设置你的 Avatar 为可见的玩家才能看到你的摄像机运作

在上传之前,无论摄像机组件是开启或关闭,它都会在Avatar加载完成后被默认关闭,你必须准备动画将摄像机组件启用

image.png

一个被放在高空的摄像机,从上到下摄录画面,左上方大画面为正交的 Scene 视口,右下方为透视的摄像机预览视口

现在我们可以获取画面了,但是有些地方看起来不对。仔细看的话,从摄像机画面中可以看到,距离画面中心越远的物体,越是小和倾斜,并且一些部分也被倾斜的物体遮住了。

这是因为摄像机和人眼一样透视(Perspective),而一般来说地图绘制不会使用透视,而是正交(Orthographic)。我们得将摄像机模式调整为正交。

image.png

摄像机组件,Projection 设定被圈出

image.png

一个被放在高空的摄像机,从上到下摄录画面,左上方大画面为正交的 Scene 视口,右下方为正交的摄像机预览视口

最后,我们需要将画面储存起来,这样才能使用,我们可以使用一张 Render Texture接收摄像机摄录的画面

Render Texture 设定一个合适的分辨率,分配给摄像机组件,获取信息的部分就完成了。

在 Unity 中,Render Texture 是一种特殊的纹理图,它允许你将摄像机捕获的画面实时输出到其中来作为一张纹理图使用。

设定分辨率时需谨慎考虑你与其他玩家的GPU性能及显存大小,设置过高可能会造成严重的性能下降

image.png

一张名为 VOB3DM - Color 的 Render Texture 被分配给摄像机

呈现地图信息

现在我们有了画面信息,需要一种办法将它呈现出来。

在 Avatar 上,呈现一个物体最简单的办法就是使用一块网格,一张纹理图,以及一个材质球(Material)。如果能够将地图作为一张纹理图,输入到一个材质球,然后再显示在一个网格上,那么这就是一个平面地图了。

稍早前我们将摄像机获取到的画面储存到了一个 Render Texture 中,现在我们可以将这个 Render Texture 作为纹理图分配给材质球,然后将这个材质球分配给一块网格来显示地图

image.png

一个简单的平面地图


你可以视乎情况调整地图使用的着色器来调整地图的视觉效果,着色器也是下一部分中关于立体感的重要元素。