読者です 読者をやめる 読者になる 読者になる

AIプログラムとかUnityゲーム開発について

探索や学習などを活用したAI系ゲームを作りたいと思います。

SpriteでMapを動的に表示する

ドルアーガの塔みたいなMAPを動的に表示しようと思ってやってみましたが、
意外にやってみるとよくわからない orz
基本的によくあるサンプルは手動で予めマップを配置している奴が多いので、
すべてスクリプトでやろうと思うとなかなかうまくいきませんでした。

f:id:yasu9780:20150617221631p:plain

①床と壁の柱の画像をResourcesフォルダにD&Dで登録 それぞれfloorとpoint
②動的に読み込む
③Spriteを動的に作って、SpriteRendererを追加して、②の画像をspriteに登録
④SpriteRendererのtransformを使って位置指定
⑤Layer指定

というわけで、transformがあるのは、SpiriteRendererであって、Spriteではない
Spriteをsceneに手動で貼ると自動的にできるので、意識してなかったけど。
あとややこしいのが、ドット合わせ。
これはSprite側のInspectorのPixelsPerUnitに画像のdotサイズを登録する
要するに1ユニットあたりのピクセル数
8x8dotの画像では8と指定すれば、transform.positionの座標で、+1すると8ドット分づれる
要するに、+1して置けば、となりの位置に画像を配置できる。
あと、床の上に柱を表示したい場合は、レイヤーを指定する必要があります。
Floor

public class mapGen : MonoBehaviour {
	Sprite floor;
	Sprite point;
	void Start () {
		floor = Resources.Load<Sprite>("floor");
		point = Resources.Load<Sprite>("point");
		for(int y=1;y<=26;y++)
			for(int x=1;x<=53;x++)
			{
				Sprite sp = Instantiate(floor) as Sprite;
				SpriteRenderer obj=new GameObject("Sprite").AddComponent<SpriteRenderer>();
				obj.sortingLayerName = "Floor";
				obj.sprite=sp;
				obj.transform.position = new Vector3(x,y,0f);
			}
		for(int y=1;y<=8;y++)
			for(int x=1;x<=17;x++)
			{
				Sprite sp = Instantiate(point) as Sprite;
				SpriteRenderer obj=new GameObject("Sprite").AddComponent<SpriteRenderer>();
				obj.sortingLayerName = "Units";
				obj.sprite=sp;
				obj.transform.position = new Vector3(x*3,y*3,0f);
			}
	}
広告を非表示にする