您的位置:首页 > 移动开发 > Unity3D

Unity2D - 6. 生成随机地图 (2) - 脚本控制Tilemap (2) 加载已有房间地图

2018-04-01 19:57 1986 查看
这个事情说难也不难, 就是把瓦片从一个tilemap复制到另一个tilemap

因为是打算使用随机的房间, 所以就会产生随机的地图这样的效果

但是!!!! 用unity做2d游戏的资料真的不好找啊….函数什么的只好自己看类的源码

先贴如何实现, 然后再把几个比较常用的函数列在后面

首先, 假设已经有了一个tilemap的预制件(prefab, 不知道的参考任意一本unity教程), 我这里有这样一张地图’map1’



在画好地图后, 应用到prefab, 然后在场景中删除这个游戏对象

游戏场景是这样:



我这里使用’WallMap’对象来作为地图的载体, 给其绑定脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Tilemaps; // 注意要包含这个

public class Test : MonoBehaviour {

Tilemap map; // 要加载到的tilemap组件
Tilemap map1; // 之前保存好的地图文件

// Use this for initialization
void Start () {
map = GetComponent<Tilemap>();
map1 = ((GameObject)Resources.Load("Maps/map1")).GetComponent<Tilemap>();

var size = map1.size; // size是一个Vector3Int, size.z == 1, 如果要手动填写的话一定要注意
var tiles = map1.GetTilesBlock(new BoundsInt(Vector3Int.zero, size));
var pos = new Vector3Int(-20, -10, 0);
map.SetTilesBlock(new BoundsInt(pos, size), tiles);
}

// Update is called once per frame
void Update () {

}
}


整个流程非常清晰:

1. 加载地图map1

2. 获取尺寸map1.size

3. 获取指定位置的瓦片map1.GetTilesBlock(new BoundsInt(Vector3Int.zero, size))

4. 复制到地图上指定位置map.SetTilesBlock(new BoundsInt(pos, size), tiles)

Tilemap

填充

填充一块瓦片

public void SetTile(Vector3Int position, TileBase tile);


使用单一填充一个矩形区域

public void BoxFill(Vector3Int position, TileBase tile, int startX, int startY, int endX, int endY);


(startX, startY, 0)要和position相同, 包括endX范围

油漆桶填充

public void FloodFill(Vector3Int position, TileBase tile);


填充一个瓦片数组(为每个瓦片指定位置)

public void SetTiles(Vector3Int[] positionArray, TileBase[] tileArray);


为指定区域填充一个瓦片数组

public void SetTilesBlock(BoundsInt position, TileBase[] tileArray);


更换某种瓦片类型

public void SwapTile(TileBase changeTile, TileBase newTile);


删除

删除所有瓦片

public void ClearAllTiles();


获取

获取指定位置某类型瓦片

public T GetTile<T>(Vector3Int position) where T : TileBase;


获取指定位置瓦片

public TileBase GetTile(Vector3Int position);


获取指定区域所有瓦片

public TileBase[] GetTilesBlock(BoundsInt bounds);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Unity2D Tilemap