私はUnityゲームエンジンで小さなゲームを作成しています。ゲームのマップは2dタイルマップから生成されます。タイルマップには非常に多くのタイルが含まれていますが、電話などのデバイスでそれらをすべてレンダリングするのは非常に難しいため、フレームレートが低下します。ゲーム内の唯一の動くものがメインキャラクタースプライトであり、それに続くカメラであるという点で、マップは完全に静的です。マップ自体には動くオブジェクトはありません。非常に単純です。必要なセクションだけをレンダリングする方法や、マップを一度にレンダリングする方法が必要です。私がトピックを研究して発見したのは、Unityメッシュクラスを使用してタイルマップをメッシュに変えることだけです。私は2dタイルマップでこれを行う方法を理解できず、とにかくレンダリング時間にどのようなメリットがあるかわかりませんでしたが、誰かが大きな2dタイルマップをレンダリングするための正しい方向に向けることができれば素晴らしいでしょう。ありがとう。大きな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にドロップします。あなたは、上の答えのイメージのように、それの横に矢印を持つ親を見るでしょう。 –