Unity3D-Tilemap初体验(Unity自带Tilemap使用体验)

60 篇文章 3 订阅
16 篇文章 1 订阅

最近新项目需要做一个用到瓦片地图的游戏,第一想法就是要用Tilemap,之前Unity没有自带的Tilemap,都是第三方插件。知道去年2017.2发布,就有自带的Tilemap啦!

将Unity升级到2017.3.1,Tilemap的基本操作,其实API已经有了,看这里:Unity Tilemap API

然后在给个别人已经翻译了的:中文

由于我项目的特殊性,需要在代码里面创建和修改Tile,初始化Tilemap,所以就动手试了试,在此记录下:

创建Tilemap,默认的还是在编辑器里面创建的,然后拿了一个引用,然后创建Tile,根据数据去生成对应的Tile。

我们的要求是,Tile颜色会变动,所以只能这么来,如果Tile是固定好的,其实可以直接在编辑器里面创建好,然后引用就好了。

下面是我尝试的代码:

public Tilemap tilemap;//引用的Tilemap
	public Tile baseTile;//使用的最基本的Tile,我这里是白色块,然后根据数据设置不同颜色生成不同Tile
	Tile[] arrTiles;//生成的Tile数组
	void Awake() {
		ins = this;
	}
	void Start () {
		StartCoroutine(InitData());
	}
	IEnumerator InitData(){
		int levelW = 100;
		int levelH = 100;

		int colorCount = 6;
		arrTiles = new Tile[colorCount];
		for(int i=0;i<colorCount;i++){
			arrTiles[i] = ScriptableObject.CreateInstance<Tile>();//创建Tile,注意,要使用这种方式
			arrTiles[i].sprite = baseTile.sprite;
			arrTiles[i].color = new Color(Random.Range(0f, 1f), Random.Range(0f,1f), Random.Range(0f, 1f), 1);
		}
		for(int i=0;i<levelH;i++){//这里就是设置每个Tile的信息了
			for(int j=0;j<levelW;j++){
				tilemap.SetTile(new Vector3Int(j, i, 0), arrTiles[Random.Range(0, arrTiles.Length)]);
			}
			yield return null;
		}

		while(true){
			yield return new WaitForSeconds(2);
			// int colorIdx = Random.Range(0, colorCount);//前面这个是随机将某个块的颜色改变,然后让Tilemap更新,主要用来更新Tile的变化
			// arrTiles[colorIdx].color = new Color(Random.Range(0f, 1f), Random.Range(0f,1f), Random.Range(0f, 1f), 1);
			// tilemap.RefreshAllTiles();

			Color c = tilemap.color;//这里是改变Tilemap的颜色,尝试是否可以整体变色
			c.a -= Time.deltaTime;
			tilemap.color = c;
		}
	}

结果是下面这样的:





宽高都是100,看了下效率,确实是高!

选择Tilemap中的方块,开始还说要自己弄个射线去检测,完了我看了API,直接用转化接口,真的是太方便了,这样就可以点击哪里,然后改变哪里了,包括缩放之后也能精确的选择到方块:

将鼠标左边转成世界坐标,注意要z轴

Vector3 wordPosition = Camera. main. ScreenToWorldPoint( mousePosition);

然后调用Tilemap的 WorldToCell 函数,就可以拿到一个地图中的坐标

Vector3Int cellPosition = backMap. WorldToCell( wordPosition);

最后就直接设置Tile了

backMap. SetTile( cellPosition, gameUI. GetSelectColor(). colorData. mTile);

用起来是真方便!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苏小败在路上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值