【发布时间】:2016-12-31 07:07:56
【问题描述】:
我正在 Unity 游戏引擎中创建一个小游戏,游戏的地图是从 2d 瓦片地图生成的。但是,tilemap 包含如此多的图块,对于像手机这样的设备来说很难将它们全部渲染出来,因此帧速率会下降。地图是完全静止的,因为游戏中唯一移动的东西是主角精灵和跟随它的摄像机。地图本身没有移动物体,这很简单,必须有一种方法只渲染它需要的部分,或者只渲染一次地图。我从研究这个主题中发现,也许一个很好的方法是购买使用 Unity 网格类将瓷砖地图变成网格。我无法弄清楚如何使用 2d tilemap 来做到这一点,而且我看不出它对渲染时间有何好处,但如果有人能指出我正确的方向来渲染大型 2d tilemap,那就太棒了。谢谢。
瓷砖系统: 为了使瓦片地图工作,我将每个单独的瓦片作为预制件放在我的预制文件夹中,并针对 2d 盒子碰撞器和缩放大小更改了属性。我将瓷砖的每个单独的预制件归因于 RGB 比例上的某种颜色,然后导入一个 png 文件,该文件具有我想要的预制件的相应颜色,如下所示:
然后我编写了一个脚本,它将每个预制件放置在其关联颜色所在的位置。一个图块看起来像这样:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Map : MonoBehaviour {
private int levelWidth;
private int levelHeight;
public Transform block13;
private Color[] tileColors;
public Color block13Color;
public Texture2D levelTexture;
public PlayerMobility playerMobility;
// Use this for initialization
void Start () {
levelWidth = levelTexture.width;
levelHeight = levelTexture.height;
loadLevel ();
}
// Update is called once per frame
void Update () {
}
void loadLevel(){
tileColors = new Color[levelWidth * levelHeight];
tileColors = levelTexture.GetPixels ();
for (int y = 0; y < levelHeight; y++) {
for (int x = 0; x < levelWidth; x++) {
// if (tileColors [x + y * levelWidth] == block13Color) {
// Instantiate(block13, new Vector3(x, y), Quaternion.identity);
// }
//
}
}
}
}
这导致与所有代码一起使用时的地图看起来像这样(我为其他预制件取出了所有代码以节省空间)
【问题讨论】:
标签: optimization 2d render game-engine unity5