Unity2D - 6. 生成随机地图 (2) - 脚本控制Tilemap (2) 加载已有房间地图
2018-04-01 19:57
1986 查看
这个事情说难也不难, 就是把瓦片从一个tilemap复制到另一个tilemap
因为是打算使用随机的房间, 所以就会产生随机的地图这样的效果
但是!!!! 用unity做2d游戏的资料真的不好找啊….函数什么的只好自己看类的源码
先贴如何实现, 然后再把几个比较常用的函数列在后面
首先, 假设已经有了一个tilemap的预制件(prefab, 不知道的参考任意一本unity教程), 我这里有这样一张地图’map1’
在画好地图后, 应用到prefab, 然后在场景中删除这个游戏对象
游戏场景是这样:
我这里使用’WallMap’对象来作为地图的载体, 给其绑定脚本
整个流程非常清晰:
1. 加载地图map1
2. 获取尺寸map1.size
3. 获取指定位置的瓦片map1.GetTilesBlock(new BoundsInt(Vector3Int.zero, size))
4. 复制到地图上指定位置map.SetTilesBlock(new BoundsInt(pos, size), tiles)
(startX, startY, 0)要和position相同, 包括endX范围
因为是打算使用随机的房间, 所以就会产生随机的地图这样的效果
但是!!!! 用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 - 6. 生成随机地图 (2) - 脚本控制Tilemap (1) 自动切换不同的sprite
- Unity2D - 3. 手动绘制简单瓦片地图TileMap
- Unity 生成随机房间、洞穴(2D、3D地图)总结
- 001【2D Rougelike】随机地图的生成
- Unity 2D角色控制脚本C#直接上代码
- 用Unity实现《随机生成 Tile Based 地图之——洞穴》中的算法
- Unity中利用柏林噪音生成随机地图
- 基于tilemap,生成2D平面的三角形组成的navigation mesh
- Unity在地图范围内任意位置随机生成3D模型
- 带高度的isometric tile map 斜45度 2d 地图制作
- unity 用鼠标控制相机绕着物体旋转脚本
- shell随机生成十位密码脚本
- 生成8位随机密码脚本
- Unity 一个对象加载多个脚本的时候的编译顺序
- Unity2D - 4. 实现android虚拟摇杆控制人物移动
- 控制3Delight Deep Shadowmap阴影生成
- Unity使用代码控制2d游戏物体(一)
- 【小松教你手游开发】【unity实用技能】控制摄像头脚本
- Unity中使用柏林噪声生成地图
- Shell脚本之:生成随机密码的若干种可能