Я создаю небольшую игру в игровом движке Unity, а карта для игры создается из 2-го tilemap. Тканевая карта содержит так много фрагментов, однако для устройства, такого как телефон, очень сложно отобразить их все, поэтому частота кадров падает. Карта полностью статична в том, что единственная движущаяся вещь в игре - главный символ спрайта и камера, следующая за ним. Сама карта не имеет движущихся объектов, она очень проста, должен быть способ визуализации только необходимых разделов или, возможно, просто отобразить карту за один раз. Все, что я обнаружил, исследуя эту тему, заключается в том, что, возможно, хороший способ сделать это - купить с помощью класса ячеек Unity, чтобы превратить tilemap в сетку. Я не мог понять, как это сделать с 2-мерным tilemap, и я не мог понять, как это пригодится времени рендеринга в любом случае, но если кто-нибудь может указать мне в правильном направлении для рендеринга больших 2D-фрагментов, которые были бы фантастическими. Благодарю.Как сделать большой 2d tilemap проще для загрузки в Unity
Плитка системы: Чтобы сделать работу с плиточной плитой, я помещаю каждую отдельную плиту в виде сборника в моей папке prefab, с атрибутами, измененными для коллайдеров 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);
// }
//
}
}
}
}
Это приводит к карте, которая выглядит следующим образом при использовании всего кода (я вынул весь код для других префабов для экономии места)
Ничего себе большой ответ спасибо!Тем не менее, я немного потерял сценарий, имеющий ссылку на камеру. Не могли бы вы объяснить, что еще немного? – dmkanerer
Как связать пустой игровой объект с каждой плиткой? – dmkanerer
Вы делаете общедоступную переменную gameObject 'public GameObject MyCamera;' [См. Это] (https://www.youtube.com/watch?v=5t8L2pXQjGI) Это хорошо. ... для подключения плитки к пустому объекту gameObject просто перетащите его имя в иерархии и опустите его поверх пустого объекта gameObject. Они вы увидите, что у родителя есть стрелка рядом с ним, как изображение в ответе выше. –