找回密码
 注册帐号

扫一扫,访问微社区

士郎 [小技巧]简易 2D 地图制作工具

13
回复
1361
查看
[ 复制链接 ]
排名
1
昨日变化

7615

主题

8162

帖子

3万

积分

Rank: 16

UID
1231
好友
186
蛮牛币
10058
威望
30
注册时间
2013-7-29
在线时间
3930 小时
最后登录
2019-4-26

活力之星原创精华达人突出贡献奖财富之证游戏蛮牛QQ群会员蛮牛妹VIP

2018-10-31 15:56:01 显示全部楼层 阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
一、前言
作为 2D 游戏开发者,制作游戏地图是一个必不可少的环节,这篇文章将通过非常简单的方式,在非常短的时间内自己做一个制作游戏的工具。
同时作为一名初学者,希望通过这种方式对自己学习的只是做一个整理、记录,方便日后回顾,水平有限,能力一般,写的不好或不对的地方希望大家指正。







二、原理
该工具通过读取开发者预制定的图片上的像素颜色值,以不同的颜色值代表不同的游戏对象,在场景中与图片上对应的位置生成相应的游戏对象,来实现地图生成的效果。



三、详细说明
3.1 代码开发
首先,自定义一个类,用于将颜色与 GameObject 对应起来,方便进行配置:

[AppleScript] 纯文本查看 复制代码
[System.Serializable]
public class ColorToPrefab
{
        public Color32 color;
        public GameObject prefab;
}

其次,再定义一个类,用于对用户预制定的图片进行加载与生成相应的地图:
[AppleScript] 纯文本查看 复制代码
public class MapLoader : MonoBehaviour
{
        [SerializeField]
        private string mapName = "";    // 预制定图片的名称

        [SerializeField]
        private ColorToPrefab[] colorToPrefabs;    //  配置颜色与 GameObject 映射列表

        private Dictionary<Color32, GameObject> colorIndex = new Dictionary<Color32, GameObject> ();        // 为加快查询设置的索引字典

        void Start ()
        {
                // 进行地图加载与生成
                LoadMap ();
        }

        private void LoadMap ()
        {
                // 初始化索引表
                InitIndex ();

                // 清空已存在的地图对象
                EmptyMap ();

                // 从 Resources 文件夹中根据预制定图片的名称读取该图片
                Texture2D _texture = Resources.Load (mapName) as Texture2D;

                if (_texture != null) {
                        Debug.Log ("Load texture success!");
                } else {
                        Debug.LogError ("Load texture failed!");
                        return;
                }

                // 从图片中读取所有像素值
                Color32[] _colors = _texture.GetPixels32 ();

                // 遍历所有像素值
                for (int i = 0; i < _texture.width; i++) {
                        for (int j = 0; j < _texture.height; j++) {
                                Color32 _c = _colors [(_texture.width * j) + i];

                                // 当像素值的 Alpha 值为 0 时,说明该处为空,不用处理
                                if (_c.a <= 0)
                                        continue;

                                // 从索引字典中找到该颜色值对应的 GameObject,并在相应的位置上生成
                                if (colorIndex.ContainsKey (_c)) {
                                        GameObject go = Instantiate (colorIndex [_c], new Vector3 (i, j, 0), Quaternion.identity) as GameObject;
                                        go.transform.SetParent (transform);
                                } else {
                                        Debug.LogError ("Wrong Color: " + _c.ToString ());
                                }
                        }
                }
        }

        // 初始化索引字典
        private void InitIndex ()
        {
                for (int i = 0; i < colorToPrefabs.Length; i++) {
                        if (!colorIndex.ContainsKey (colorToPrefabs .color)) {
                                colorIndex.Add (colorToPrefabs .color, colorToPrefabs .prefab);
                        } else {
                                Debug.LogError ("Same Color: " + colorToPrefabs .color.ToString ());
                        }
                }
        }

        // 清空已存在的地图对象
        private void EmptyMap ()
        {
                while (transform.childCount > 0) {
                        Transform _tf = transform.GetChild (0);
                        _tf.SetParent (null);
                        Destroy (_tf.gameObject);
                }
        }
}

整个代码非常简短,理解起来应该不难。
3.2 使用步骤
第一步,设计每种颜色值对应的游戏对象
第二步,根据上述对应关系,使用 PS 或 GIMP 等图像处理软件,制作地图,并将该图片放到项目中的 Resources 目录下,如下图所示:

1.jpg


其中黄色代表金币,黑色代表土地,蓝色代表玩家,红色代表怪物


第三步,在场景中新建一个 Empty GameObject,挂在 MapLoader 脚本,并为其设置好地图的名称和颜色与 GameObject 的对应关系,如下图所示:

2.jpg


第四步,点击 Play,即可看到生成的地图了,由于我的地图图片上有四种颜色,我只制定了 3 个对应关系,因此在 Console 里可以看到报错,如下图所示:


3.jpg

到此,地图生成完毕,非常简单。


四、总结
使用该方法生成地图,由于其原理非常简单,开发成本非常低,不仅适用于程序员,甚至连策划和美术都可以在不进行编码的情况下完成对地图的设计。但相比其他带有 GUI 的地图编辑工具还是逊色了几分,可以在小型项目中进行使用。

知乎@杨睿涵




回复

使用道具 举报

6蛮牛粉丝
1339/1500
排名
3393
昨日变化

2

主题

358

帖子

1339

积分

Rank: 6Rank: 6Rank: 6

UID
238701
好友
1
蛮牛币
1065
威望
0
注册时间
2017-8-21
在线时间
539 小时
最后登录
2019-4-25
2018-10-31 16:11:20 显示全部楼层
作为一个广西人,在北京吃螺蛳粉还是比较推荐水平有限连锁店
回复 支持 反对

使用道具 举报

5熟悉之中
564/1000
排名
4882
昨日变化

0

主题

119

帖子

564

积分

Rank: 5Rank: 5

UID
171160
好友
0
蛮牛币
1493
威望
0
注册时间
2016-9-22
在线时间
147 小时
最后登录
2018-11-23
2018-11-1 09:04:34 显示全部楼层
回复

使用道具 举报

5熟悉之中
897/1000
排名
2967
昨日变化

0

主题

189

帖子

897

积分

Rank: 5Rank: 5

UID
264326
好友
0
蛮牛币
9787
威望
0
注册时间
2018-1-14
在线时间
212 小时
最后登录
2019-4-20
2018-11-1 09:36:40 显示全部楼层
回复

使用道具 举报

5熟悉之中
590/1000
排名
4499
昨日变化

0

主题

91

帖子

590

积分

Rank: 5Rank: 5

UID
282652
好友
1
蛮牛币
3204
威望
0
注册时间
2018-5-24
在线时间
173 小时
最后登录
2019-4-24
2018-11-1 10:49:03 显示全部楼层
小地图666
回复

使用道具 举报

7日久生情
1846/5000
排名
1193
昨日变化

0

主题

542

帖子

1846

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
87577
好友
0
蛮牛币
6546
威望
0
注册时间
2015-3-31
在线时间
326 小时
最后登录
2019-4-26
2018-11-1 10:57:05 显示全部楼层
too good too strong!
回复 支持 反对

使用道具 举报

5熟悉之中
659/1000
排名
4392
昨日变化

1

主题

76

帖子

659

积分

Rank: 5Rank: 5

UID
273353
好友
3
蛮牛币
666
威望
0
注册时间
2018-3-20
在线时间
248 小时
最后登录
2019-3-5
2018-11-1 11:07:05 显示全部楼层
学到了,谢谢楼主大大
回复 支持 反对

使用道具 举报

排名
15298
昨日变化

0

主题

13

帖子

88

积分

Rank: 2Rank: 2

UID
277705
好友
0
蛮牛币
12
威望
0
注册时间
2018-4-18
在线时间
25 小时
最后登录
2019-4-24
2018-11-1 14:05:13 显示全部楼层
{:97:}学到了,谢谢楼主大大
回复 支持 反对

使用道具 举报

5熟悉之中
867/1000
排名
4473
昨日变化

3

主题

138

帖子

867

积分

Rank: 5Rank: 5

UID
168522
好友
0
蛮牛币
615
威望
0
注册时间
2016-9-14
在线时间
398 小时
最后登录
2019-4-23
2018-11-1 15:47:40 显示全部楼层
阅文收币中。。。
回复

使用道具 举报

3偶尔光临
252/300
排名
8746
昨日变化

0

主题

13

帖子

252

积分

Rank: 3Rank: 3Rank: 3

UID
241836
好友
0
蛮牛币
415
威望
0
注册时间
2017-9-6
在线时间
103 小时
最后登录
2019-4-25
2018-11-1 19:10:40 显示全部楼层
不错顶一个~
回复

使用道具 举报

7日久生情
1527/5000
排名
3444
昨日变化

0

主题

888

帖子

1527

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
210390
好友
0
蛮牛币
1846
威望
0
注册时间
2017-3-7
在线时间
205 小时
最后登录
2019-4-16
2018-11-2 13:42:20 显示全部楼层
回复

使用道具 举报

3偶尔光临
284/300
排名
8080
昨日变化

1

主题

40

帖子

284

积分

Rank: 3Rank: 3Rank: 3

UID
247796
好友
0
蛮牛币
18
威望
0
注册时间
2017-10-9
在线时间
91 小时
最后登录
2019-1-27
2018-11-6 13:42:49 显示全部楼层
谢谢分享
回复

使用道具 举报

排名
48129
昨日变化

0

主题

14

帖子

23

积分

Rank: 1

UID
297178
好友
0
蛮牛币
10
威望
0
注册时间
2018-9-15
在线时间
5 小时
最后登录
2019-2-22
2019-1-2 01:06:58 显示全部楼层
感觉不错的说
回复

使用道具 举报

排名
19336
昨日变化

0

主题

9

帖子

59

积分

Rank: 2Rank: 2

UID
307149
好友
0
蛮牛币
51
威望
0
注册时间
2018-12-5
在线时间
20 小时
最后登录
2019-3-29
2019-3-7 10:31:55 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则