0

異種タイルでタイル ゲームを実装しようとしています。大小さまざまなタイル。すべてのタイルサイズは、簡単にするために (メートル単位で) サイズが丸められています。もちろん、すべてをタイル化する必要があるという要件で、疑似乱数の順序でタイルに適合するアルゴリズムを探しています。

以下は私が書いた数行ですが、必要に応じて機能しません。どういうわけか、タイル間の間隔が考慮されていません。

最初に、外出先で作成されるパーリン ノイズのマップを生成します。タイルマップに辞書を使用しています。

タイルのオブジェクト メーター変数は、正方形のタイルの幅と奥行き (メートル単位) です。tiles 配列の最初のタイルは、スキップを指定するための空のタイルです。

編集: Unity にスケーリングの問題があることがわかりました。ゲーム内の平面にスケール 1 を適用すると、サイズが 10 になります。誰かがその説明を提供できますか?

 for(int i=-viewSpreadMeters;i<=viewSpreadMeters;i++)
        {
            for(int j=-viewSpreadMeters;j<=viewSpreadMeters;j++)
            {   
                int x = currentTerrainID[0] + i;
                int y = currentTerrainID[1] + j;

                if (!tileMap.ContainsKey(x, y)) {
                    int id = noiseMap[x, y];
                    int iteratedTiles = 0;
                Restart:
                    for (int k = 1; k < tiles[id].meters; k++) {
                        for (int l = 1; l < tiles[id].meters; l++) {
                            int x2 = x + k;
                            int y2 = y + l;
                            if (tileMap.ContainsKey(x2, y2)) {
                                int prevMeters;
                                do {
                                    iteratedTiles++;
                                    print ("Iterated tiles" + iteratedTiles);
                                    if (iteratedTiles >= tiles.Length - 1) {
                                        id = 0;
                                        goto EndLoop;
                                    }
                                    prevMeters = tiles[id].meters;
                                    id++;
                                    id %= tiles.Length;
                                    if (id == 0) id++;
                                } while(tiles[id].meters >= prevMeters);                            
                                goto Restart;
                            }
                        }
                    }
                EndLoop:
                    tileMap.Add(x, y, id);
                    for (int k = 1; k < tiles[id].meters; k++) {
                        for (int l = 1; l < tiles[id].meters; l++) {
                            int x2 = x + k;
                            int y2 = y + l;
                            tileMap.Add(x2, y2, 0);
                        }
                    }
                }
            }
        }
4

2 に答える 2

0

スケーリングの問題は、アセットのインポート方法によって異なります。タイルがプログラムで作成されている場合は、1:1 の縮尺にする必要があります。ただし、Max や Maya などの DCC ツールからインポートする場合は、モデルのインポート設定で「グローバル スケール」設定を確認する必要があります。ソース アプリケーションとその設定によっては、グローバル スケールが拡大または拡大に設定される場合があります。インポートされたユニットを 1:100 から 100:1 に縮小します。

部分的なエッジに沿ってエッジ マッチングを管理する必要があるため、異種のタイルは注意が必要です。本当に異種サイズが必要ですか?

于 2013-03-31T20:15:24.040 に答える
0

上記のコードには誤りがあり、continue が欠落しています。また、異種タイルを機能させるにはチャンクが必要でした。

于 2013-03-31T19:42:57.387 に答える