質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

0回答

1375閲覧

Unity:Tilemapのタイル配置が重複する

zenobread

総合スコア44

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2019/10/19 09:54

やりたいこと

Tilemapeditorでマップを作成し、xmlファイルに変換して読み込み、そのXMLファイルに対応したタイルを配置したい。

直面してる問題

プログラム自体は問題なく動いているのですが、なぜかTileSet()でタイル配置する際に、
既にタイルが配置されている場所にタイルが配置されてしまいます。

コードはXMLファイルを読み込んで、queueオブジェクトに順々に入れていく形です
そしてMapCreate()で今度はDequeueして取り出して配置しています

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using System.Xml.Serialization; 5using System.IO; 6using System.Xml.Linq; 7using System.Xml; 8using UnityEngine.Tilemaps; 9using System.Linq; 10using System; 11using UnityEngine.Networking; 12public class Simulation_CreateMap : MonoBehaviour 13{ 14 public Tile tile; 15 public Tilemap Simulation_map; 16 public Tilemap atk_around; 17 public Tilemap Tilemap; 18 public Queue<int> queue_X = new Queue<int>(); 19 public Queue<int> queue_Y = new Queue<int>(); 20 public Queue<int> queue_V = new Queue<int>(); 21 public TextAsset XML; 22 int y = 0; 23 // Start is called before the first frame update 24 void Start() 25 { 26 XmlDocument xmlDoc = new XmlDocument(); 27 xmlDoc.LoadXml(XML.text); 28 XmlNodeList maplist = xmlDoc.GetElementsByTagName("data"); 29 foreach(XmlNode map in maplist) 30 { 31 foreach(XmlNode list in map) 32 { 33 if (list.Name != "chunk") continue; 34 XmlNode node = list.FirstChild; 35 string val = node.Value; 36 int y = 0; 37 foreach(string line in val.Split('\n')) 38 { 39 if (line == "\t") continue; 40 int x = 0; 41 foreach(string s in line.Split(',')) 42 { 43 int v = 0; 44 if((int.TryParse(s,out v))) 45 { 46 Debug.Log("x:y:v\t" + x + "\t" + y + "\t" + v); 47 Set(x, y, v); 48 x++; 49 } 50 else 51 { 52 Debug.Log("Miss"+s); 53 } 54 } 55 y++; 56 } 57 } 58 } 59 MapCreate(queue_X, queue_Y, queue_V); 60 61 62 } 63 public void Set(int a, int b, int c) 64 { 65 queue_V.Enqueue(c); 66 queue_X.Enqueue(a); 67 queue_Y.Enqueue(b); 68 Debug.Log(a + "" + b + "" + c); 69 } 70//ここから問題のコード 71 public void MapCreate(Queue<int> a, Queue<int> b, Queue<int> c) 72 { 73 var i = 0; 74 var map_tile = Resources.LoadAll<Tile> ("tilemap/simulation_maptile"); 75 var z = c.Count; 76 Debug.Log("maptile.Length"+map_tile.Length+"\ta.Count:"+a.Count+"\tb.Count"+b.Count+"\tc.Count:"+z); 77 for(i=0;i<=z-1;i++) 78 { 79 int v = c.Dequeue(); 80 int A = a.Dequeue(); 81 int B = b.Dequeue(); 82      //Vector3Int tileposition=Simulation_map.WorldToCell(new Vector3(A,B,0)); 83 //なぜかA,Bそれぞれを2倍にしなければtileposition.xに繰り返して同じ値が代入される 84 Vector3Int tileposition =Simulation_map.WorldToCell(new Vector3(A*2,B*2,0)); 85 Debug.Log("A:B:\t" + A + "\t" + B); 86 Debug.Log("X:Y:"+tileposition.x+"\t"+tileposition.y); 87 Simulation_map.SetTile(tileposition, map_tile[v]); 88 89 } 90 } 91 // Update is called once per frame 92 void Update() 93 { 94 //Monobehaviorはnewではなくgetcomponentで取得できる 95 } 96 97} 98

問題は
Vector3Int tileposition =Simulation_map.WorldToCell(new Vector3(A2,B2,0));
の部分で、どうして座標を2倍にしなければ2度繰り返して同じtileposition.xとtileposition.yが出力されるのか、ということです


Vector3Int tileposition =Simulation_map.WorldToCell(new Vector3(A,B,0));の場合
A:B:4 4
X:Y:3 2
A:B:5 4
X:Y:3 2
Vector3Int tileposition =Simulation_map.WorldToCell(new Vector3(A2,B2,0));の場合
A:B:4 4
X:Y:4 4
A:B:5 4
X:Y:5 4

これに関しては理由が知りたいのみです。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KanazawaKureha

2019/10/26 13:17

裏で行われている処理がわからない時は、表にして規則性を見つけ出すのが一番です。 なんでもないところでつまずいている場合も多いのでA,Bに対するX,Yでグラフを作ってみていただけると理解の助けになるかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問