色々試しに組んでみてるんですが、プレハブを作った時に名前がそれぞれ別につけられれば、できることも増えるかな……というスクリプトです。
プレハブの生成
プレハブの作り方そのものはこっちの記事にゆずるとして、
//Unity C#
//横の描画
public int i;
//縦の描画
public int j;
//繰り返し代入に使用
public int mapPositionX;
public int mapPositionY;
//マップを配置するのに仕様する位置
public Vector3 mapPosition;
//マップ縦の数
public int columns;
//マップ横の数
public int rows;
//左下からタイルを数える
public int tileSum = 1;
//タイル
public GameObject mapBlock;
public Sprite floor;
(スプライト以下略)
void Start()
{
stage = 0;
columns = 8;
rows = 12;
//タイル左下
mapPositionX = -3;
mapPositionY = -5;
//縦のタイル数
while (j < rows)
{
//横のタイル数
while (i < columns)
{
GameObject blockTile = Instantiate(mapBlock) as GameObject;
mapPosition.x = mapPositionX;
mapPosition.y = mapPositionY;
blockTile.transform.position = mapPosition;
i++;
//タイルのIDごとに画像変える
switch (tileSum)
{
case 1:
case 2:
(中略)
blockTile.GetComponent().sprite = blackTile;
break;
(中略)
}
tileSum++;
//右にひとつずらす
mapPositionX++;
}
j++;
//横のタイル数初期化
mapPositionX -= i;
//縦のタイルを上にひとつずらす
mapPositionY ++;
i = 0;
}
}
こんな感じでコードを走らせれば(本題じゃないので読み飛ばしてください)、
マップがスクリプトから描画されるんですが、
作られたタイルは全部同じ名前になります。これを別々の名前にしたい、という状態です。
プレハブの名前の変更
オブジェクト名の変更
gameObject.name = “名前”
gameObject.name = “名前”
//Unity C#
blockTile.name = "objectx" + mapPositionX + "y" + mapPositionY;
tileSum++;
//右にひとつずらす
mapPositionX++;
}
j++;
解決策は単純で、nameを使うと名前の変更ができるので、GameObject xxx = Instantiateのxxxに対して変数を使った名前を代入してやれば、
こんな感じで座標ごとの名前をつけることができます。ここで使ってるのはint変数ですが、ToString()も不要です。
やりたいこととしては特定のタイルをクリックすると隣接するタイルも明るくなるとかなので、名前(または別の何か)をどうつけてどう参照するかが問題ではあるんですが、ひとまず以上です。
やりたいことから逆引きするUNITYの使い方まとめ
Unityをやりたいことから学習していけるよう、機能・用途別にまとめたページです。C#の命令別の逆引きは現時点で作っていません。2019の時期に書き始めているので、それより前のバージョンについては言及しません。
コメント