Unity 게임 엔진에서 작은 게임을 만들고 게임용 맵이 2d 타일 맵에서 생성됩니다. 타일 맵은 너무 많은 타일을 포함하고 있지만 전화기와 같은 장치가 모든 것을 렌더링하는 것은 매우 어려우므로 프레임 속도가 떨어집니다. 게임의 유일한 움직이는 것은 주인공 스프라이트와 그 뒤의 카메라라는 점에서 맵은 완전히 정적입니다. 지도 자체에는 움직이는 물체가 없으며 매우 간단합니다. 필요한 부분 만 렌더링하거나 한 번에지도를 렌더링하는 방법이 있어야합니다. 이 주제를 연구 한 결과, Unity 메쉬 클래스를 사용하여 타일 맵을 메시로 변환하는 것이 좋은 방법 일 것이라고 생각합니다. 2d 타일 맵을 사용하여이 작업을 수행하는 방법을 알 수 없었습니다. 어쨌든 렌더링 시간에 어떤 이점이 있는지를 알 수 없었습니다. 그러나 누가 멋진 2 차원 타일 맵을 렌더링 할 수 있는지 올바른 방향으로 알려줄 수 있다면 좋을 것입니다. 감사.Unity에서 큰 2d 타일 맵을 쉽게로드하는 방법
타일 시스템 : 타일 맵을 작동시키기 위해 필자는 모든 개별 타일을 프리 필드 폴더에 프리 패브로 배치하고 속성을 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
당신은 public gameObject 변수를'public GameObject MyCamera;'[이것을보십시오] (https://www.youtube.com/watch?v=5t8L2pXQjGI) 좋습니다. 타일을 빈 gameObject에 연결하려면 계층의 이름을 드래그하여 빈 gameObject 위에 놓습니다. 부모님은 위의 답에있는 이미지와 같이 옆에 화살표가있는 부모를 보게됩니다. –