怎样用unity做unity迷宫游戏寻

迷宫 寻宝等小游戏啊【unity3d吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:74,856贴子:
迷宫 寻宝等收藏
迷宫 寻宝等小游戏啊
达内unity3d培训全程&实战教学&,unity3d金牌讲师授课.免费unity3d课程试听中!到达内unity3d学院学习unity3d,只需4个月速成unity3d游戏工程师.
当然是我啦 你看我都11级 前面两个等级太低 肯定不行
登录百度帐号推荐应用查看: 217回复: 28
Unity游戏迷宫设计实例训练视频教程
元素币活跃度贡献值
在线时间8136 小时
高清 720P&
马上注册成为元素者,获取海量元素资源,结识各路大神级人物
才可以下载或查看,没有帐号?
官网下载:
尊敬的游客,如果您要查看本帖隐藏内容请
本视频教程是由PluralSight机构出品的Unity游戏迷宫设计实例训练视频教程,时长:5小时07分,大小:2.1 GB,MP4高清视频格式,教程使用软件:Unity,作者:Joy Horvath,共44个章节,语言:英语
QQ截图16.png (418.73 KB, 下载次数: 0)
13:10 上传
QQ截图39.png (452.55 KB, 下载次数: 0)
13:10 上传
QQ截图10.png (696.06 KB, 下载次数: 0)
13:10 上传
QQ截图35.png (671.33 KB, 下载次数: 0)
13:10 上传
QQ截图03.png (547.78 KB, 下载次数: 0)
13:11 上传
QQ截图15.png (581.07 KB, 下载次数: 0)
13:11 上传
QQ截图35.png (563.81 KB, 下载次数: 0)
13:11 上传
QQ截图08.png (676.88 KB, 下载次数: 0)
13:11 上传
QQ截图29.png (648.72 KB, 下载次数: 0)
13:11 上传
QQ截图44.png (648.14 KB, 下载次数: 0)
13:12 上传
QQ截图07.png (662.43 KB, 下载次数: 0)
13:12 上传
QQ截图21.png (635.05 KB, 下载次数: 0)
13:12 上传
QQ截图06.png (610.87 KB, 下载次数: 0)
13:12 上传
QQ截图32.png (813.12 KB, 下载次数: 0)
13:12 上传
OcgbUaE.jpg (51.56 KB, 下载次数: 0)
02:24 上传
元素币活跃度贡献值
元素王, 积分 8586, 距离下一级还需 21414 积分
元素王, 积分 8586, 距离下一级还需 21414 积分
在线时间95 小时
感谢楼主分享!!!
还没有设置签名!您可以在此展示你的链接,或者个人主页!
元素币活跃度贡献值
元素王, 积分 5958, 距离下一级还需 24042 积分
元素王, 积分 5958, 距离下一级还需 24042 积分
在线时间120 小时
每天一早上元素,挖矿撩妹两不误!
还没有设置签名!您可以在此展示你的链接,或者个人主页!
元素币活跃度贡献值
元素侠, 积分 630, 距离下一级还需 1370 积分
元素侠, 积分 630, 距离下一级还需 1370 积分
在线时间12 小时
look...........................
还没有设置签名!您可以在此展示你的链接,或者个人主页!
元素币活跃度贡献值
元素王, 积分 13060, 距离下一级还需 16940 积分
元素王, 积分 13060, 距离下一级还需 16940 积分
在线时间388 小时
我们先定一个能达到的小目标,先赚它一亿元素币
还没有设置签名!您可以在此展示你的链接,或者个人主页!
元素币活跃度贡献值
元素王, 积分 17672, 距离下一级还需 12328 积分
元素王, 积分 17672, 距离下一级还需 12328 积分
在线时间153 小时
还没有设置签名!您可以在此展示你的链接,或者个人主页!
元素币活跃度贡献值
元素皇, 积分 41970, 距离下一级还需 58030 积分
元素皇, 积分 41970, 距离下一级还需 58030 积分
土豪金1419
在线时间551 小时
资源甚好,发帖艰辛,且阅且珍惜!
还没有设置签名!您可以在此展示你的链接,或者个人主页!
元素币活跃度贡献值
元素王, 积分 22166, 距离下一级还需 7834 积分
元素王, 积分 22166, 距离下一级还需 7834 积分
在线时间393 小时
资源发布哪家强?元素首发称大王!
还没有设置签名!您可以在此展示你的链接,或者个人主页!
元素币活跃度贡献值
元素皇, 积分 43609, 距离下一级还需 56391 积分
元素皇, 积分 43609, 距离下一级还需 56391 积分
土豪金1745
在线时间556 小时
每天一早上元素,挖矿撩妹两不误!
还没有设置签名!您可以在此展示你的链接,或者个人主页!
元素币活跃度贡献值
元素王, 积分 25886, 距离下一级还需 4114 积分
元素王, 积分 25886, 距离下一级还需 4114 积分
在线时间442 小时
我们先定一个能达到的小目标,先赚它一亿元素币
还没有设置签名!您可以在此展示你的链接,或者个人主页!
元素币活跃度贡献值
元素王, 积分 8586, 距离下一级还需 21414 积分
元素王, 积分 8586, 距离下一级还需 21414 积分
在线时间95 小时
感谢楼主分享!!!
还没有设置签名!您可以在此展示你的链接,或者个人主页!
元素币活跃度贡献值
元素王, 积分 6553, 距离下一级还需 23447 积分
元素王, 积分 6553, 距离下一级还需 23447 积分
在线时间88 小时
带你赚币带你飞,元素里面有正妹!
还没有设置签名!您可以在此展示你的链接,或者个人主页!
元素币活跃度贡献值
元素魔, 积分 3141, 距离下一级还需 1859 积分
元素魔, 积分 3141, 距离下一级还需 1859 积分
在线时间59 小时
从业不识微元素,做遍项目也枉然
还没有设置签名!您可以在此展示你的链接,或者个人主页!
元素币活跃度贡献值
元素王, 积分 8586, 距离下一级还需 21414 积分
元素王, 积分 8586, 距离下一级还需 21414 积分
在线时间95 小时
感谢楼主分享!!!
还没有设置签名!您可以在此展示你的链接,或者个人主页!
元素币活跃度贡献值
元素王, 积分 27677, 距离下一级还需 2323 积分
元素王, 积分 27677, 距离下一级还需 2323 积分
土豪金1116
在线时间253 小时
本人的资源仅供学习使用,任何商业用途,一概不负责,请追究使用这本人吧。
元素币活跃度贡献值
元素王, 积分 29780, 距离下一级还需 220 积分
元素王, 积分 29780, 距离下一级还需 220 积分
在线时间436 小时
带你赚币带你飞,元素里面有正妹!
还没有设置签名!您可以在此展示你的链接,或者个人主页!
元素币活跃度贡献值
元素王, 积分 11172, 距离下一级还需 18828 积分
元素王, 积分 11172, 距离下一级还需 18828 积分
在线时间170 小时
资源发布哪家强?元素首发称大王!
还没有设置签名!您可以在此展示你的链接,或者个人主页!
元素币活跃度贡献值
元素阴阳师
元素皇, 积分 55629, 距离下一级还需 44371 积分
元素皇, 积分 55629, 距离下一级还需 44371 积分
土豪金2000
在线时间428 小时
我们先定一个能达到的小目标,先赚它一亿元素币
掌控世间一切力量!游离于元素界,似在非在。
元素币活跃度贡献值
元素王, 积分 8305, 距离下一级还需 21695 积分
元素王, 积分 8305, 距离下一级还需 21695 积分
在线时间151 小时
这世上没有什么是元素币搞不定的,如果有,那就用更多!
还没有设置签名!您可以在此展示你的链接,或者个人主页!
元素币活跃度贡献值
元素王, 积分 6553, 距离下一级还需 23447 积分
元素王, 积分 6553, 距离下一级还需 23447 积分
在线时间88 小时
元素那么大,我想来看看!
还没有设置签名!您可以在此展示你的链接,或者个人主页!
圣剑-【塞姆里亚】
【剑LV14,主题=5000】-异次元世界中,上古遗留的神秘物质所铸,只有神才有资格观赏,只有最强的神才有机会获取,圣剑之光有扭转乾坤,创造一切的【创世之力】
【拥有10W元素币】才可以获得,您已经富可敌国了,钱对你来说只是一个数字,没有任何别的意义!
圣杖-【安东尼达斯】
【MP20000】异次元世界的物品,有灵性的法杖,他一直默默的等待你的到来,并且会永远的守护你
【贡献3000】女皇也有被男人欺骗的时候,女皇留下一滴眼泪,然后打造成光鲜亮丽的护身符送给了她的新男宠
【2000小时】的在线,感动12个星座所守护的12件黄金圣衣,用它来保卫你的女神(或者男神)吧!
圣盾-【瓦雷利亚】
加入【元素5年】这种材料是目前已知最坚硬的物质,但是他的来历一直是一个谜,有人说它根本不属于这个次元空间
达成成就【神级追猎者】在元素悬赏中50次被评为最佳答案
达成成就【元素先知】在元素知道
超过200次解决提问者的问题
达成成就【神的速度】最先成为元素神的30个人,或者土豪重金打造
限量版珍贵徽章,参与元素特定活动,元素T恤获取者
24K金矿镐,往元素矿场投资10W元素币
泰坦高能矿
升级到【宇宙·界王神】
仓库中存货有5000个宇宙魔方
天降异火,大菠萝曾经火过,直接获取任何一个售价低于6000元素币的资源
【元素晶石】
只有【元素大神】才能拥有,自由出入元素秘境之钥
【群组碎片】
创建元素QQ群,群主专属徽章,群人数200+
【真爱之花】
情人节限量版,据说此花会带来桃花运!
神秘液体转化药水的强化版,能将活跃度溶解炼制出元素币
研发中...神秘粘稠液体
【不死鸟羽翼】
天地浩劫,涅槃重生。掌控六界一切资源
【50小时】的学习,已经证明了你自己,这件法袍是你的了,由于使用了简陋的材料,能穿一个月已经不错了!
【MP50】这次的冒险才刚刚开始,和所有故事一样,你得先有一个属于自己的法杖!即使他的法力会在30天后消失
守望者【赤炼】
守望者lewis的强大武器
【拥有1000元素币】你就可以领取
加入【元素1年】自古美女爱英雄,这是千年不变的定律!英雄盾会为你们见证
【拥有3000元素币】其实也是很容易的事情
达成成就【元素贤者】在元素知道
超过20次解决提问者的问题
达成成就【赏金统帅】发布过20次元素悬赏,并被人解决
守望者【D.Va兔子】
D.Va的兔子标志,有点萌
元素推荐-友情提示 /1
每周一次的扩散大招带来更多元素币收益!
快速登录:
收藏帖子(4)
周一至周日:08:00-22:00
积分和充值
&2014&&. All rights reserved. (查看: 982回复: 26
如何使用Unity制作游戏关卡
元素币活跃度贡献值
元素侠, 积分 831, 距离下一级还需 1169 积分
元素侠, 积分 831, 距离下一级还需 1169 积分
在线时间12 小时
马上注册成为元素者,获取海量元素资源,结识各路大神级人物
才可以下载或查看,没有帐号?
本文是“使用Unity制作《The Fork Of Truth》的关卡”系列的第三部分。前两部分分别是:
在这最后一部分,我将介绍一些组合关卡的小技巧。
游戏的视角是必须认真考虑的,一点儿变化都会影响我们看游戏的方式。比如,镜头“越肩”,游戏看起来就像第三人称格斗游戏;镜头高悬静止,游戏似乎是RTS;镜头跟随着角色移动,游戏又像动作RPG了。
-0.jpg (39.93 KB, 下载次数: 12)
16:45 上传
near position
-1.jpg (40.71 KB, 下载次数: 11)
16:45 上传
far position
(《The Fork Of Truth》的镜头的近距离位置和远距离位置——注意角度的区别。)
我们调整了很长时间的视角,最终决定采用动作RPG的摄像位置的变体,也就是以固定的角度、从上到下观察角色。摄像相的高度会根据缩放程序轻微地改变:当镜头接近地面时,角度倾向于水平;当镜头位于高空时,角度倾向于垂直。
从小通道到开阔区域,关卡坡度会变化。通过添加“阻塞点”,玩家被迫进入关卡的狭窄传送口,这样就避免他们在开阔空间中闲逛或迷路。路径基本上是线性的,但有足够的探索空间。自然缩窄的通道会把玩家带回路径。
-2.jpg (55.18 KB, 下载次数: 11)
16:45 上传
《The Fork Of Truth》的关卡,红色箭头指向阻塞点(from paladinstudios)
这个关卡给予玩家一定的探索和发现物品的空间,但也把他们引向达到最终目标的路径。
只要可以,我们就会尽量给场景添加有趣的细节,使场景更具故事性、更生动。
-3.jpg (35.17 KB, 下载次数: 12)
16:45 上传
船坞边的渔具
-4.jpg (41.7 KB, 下载次数: 9)
16:45 上传
被踩坏的围栏,是地精骚乱后的结果
-5.jpg (51.58 KB, 下载次数: 15)
16:45 上传
告诉你正确路径的路标
-6.jpg (46.64 KB, 下载次数: 9)
16:45 上传
草地上的(假)牛
这些小细节可以传达丰富的场景信息。比如,谁居住在这里?这里发生了什么事?是否危险?接下来会遇到什么?
我们使用简单的、具有即时阴影的平行光源。分享一个光照的小技巧:太阳光的颜色应该有一点儿黄,阴影应该有一点儿蓝。这是模拟晴朗的天空(四处都是蓝色)中挂着一轮“黄”日(平行光)。
距离玩家较远的地方会产生雾。这么做,可以模糊远处的物品、节省渲染工作量,如果雾比较浓密的话,还可能营造出一种恐怖的氛围。
.jpg (43.66 KB, 下载次数: 7)
16:45 上传
LFG-Fork-Of-Truth
(稀疏的雾可以强化场景的氛围——但不要做过头了。)
元素币 +10
不错的内容,帖子发重复了,我给你删掉一个
还没有设置签名!您可以在此展示你的链接,或者个人主页!
元素币活跃度贡献值
土豪金12280
在线时间2214 小时
正是本尊想要的!
【元素推荐】UNITY 跑车 豪车 汽车模型 资源整合
/plugin.php?id=it618_tietuibang:tui&uid=37641&tid=42684
元素币活跃度贡献值
土豪金1001
在线时间2270 小时
还没有设置签名!您可以在此展示你的链接,或者个人主页!
元素币活跃度贡献值
元素皇, 积分 40569, 距离下一级还需 59431 积分
元素皇, 积分 40569, 距离下一级还需 59431 积分
在线时间805 小时
元素帖子强,满满正能量!
还没有设置签名!您可以在此展示你的链接,或者个人主页!
元素币活跃度贡献值
元素魔, 积分 3646, 距离下一级还需 1354 积分
元素魔, 积分 3646, 距离下一级还需 1354 积分
在线时间84 小时
感谢楼主分享,楼下保持队形
还没有设置签名!您可以在此展示你的链接,或者个人主页!
元素币活跃度贡献值
元素侠, 积分 1540, 距离下一级还需 460 积分
元素侠, 积分 1540, 距离下一级还需 460 积分
在线时间15 小时
带你赚币带你飞,元素里面有正妹!
还没有设置签名!您可以在此展示你的链接,或者个人主页!
元素币活跃度贡献值
元素王, 积分 22967, 距离下一级还需 7033 积分
元素王, 积分 22967, 距离下一级还需 7033 积分
在线时间229 小时
好教程,收藏
还没有设置签名!您可以在此展示你的链接,或者个人主页!
元素币活跃度贡献值
元素王, 积分 22967, 距离下一级还需 7033 积分
元素王, 积分 22967, 距离下一级还需 7033 积分
在线时间229 小时
好教程,收藏
还没有设置签名!您可以在此展示你的链接,或者个人主页!
元素币活跃度贡献值
元素侠, 积分 1742, 距离下一级还需 258 积分
元素侠, 积分 1742, 距离下一级还需 258 积分
在线时间31 小时
正是本尊想要的!
还没有设置签名!您可以在此展示你的链接,或者个人主页!
元素币活跃度贡献值
元素侠, 积分 539, 距离下一级还需 1461 积分
元素侠, 积分 539, 距离下一级还需 1461 积分
在线时间0 小时
还没有设置签名!您可以在此展示你的链接,或者个人主页!
元素币活跃度贡献值
元素侠, 积分 539, 距离下一级还需 1461 积分
元素侠, 积分 539, 距离下一级还需 1461 积分
在线时间0 小时
大家加油做哦
还没有设置签名!您可以在此展示你的链接,或者个人主页!
元素币活跃度贡献值
元素皇, 积分 56425, 距离下一级还需 43575 积分
元素皇, 积分 56425, 距离下一级还需 43575 积分
土豪金1679
在线时间826 小时
还没有设置签名!您可以在此展示你的链接,或者个人主页!
元素币活跃度贡献值
元素王, 积分 17581, 距离下一级还需 12419 积分
元素王, 积分 17581, 距离下一级还需 12419 积分
在线时间273 小时
还没有设置签名!您可以在此展示你的链接,或者个人主页!
元素币活跃度贡献值
元素王, 积分 5255, 距离下一级还需 24745 积分
元素王, 积分 5255, 距离下一级还需 24745 积分
在线时间68 小时
参与/回复主题关闭
RE: 如何使用Unity制作游戏关卡 [修改]
还没有设置签名!您可以在此展示你的链接,或者个人主页!
元素币活跃度贡献值
元素王, 积分 7919, 距离下一级还需 22081 积分
元素王, 积分 7919, 距离下一级还需 22081 积分
在线时间131 小时
感谢分享{:1_144:}
还没有设置签名!您可以在此展示你的链接,或者个人主页!
元素币活跃度贡献值
元素王, 积分 7919, 距离下一级还需 22081 积分
元素王, 积分 7919, 距离下一级还需 22081 积分
在线时间131 小时
感谢分享{:1_144:}
还没有设置签名!您可以在此展示你的链接,或者个人主页!
元素币活跃度贡献值
元素王, 积分 11102, 距离下一级还需 18898 积分
元素王, 积分 11102, 距离下一级还需 18898 积分
在线时间171 小时
还没有设置签名!您可以在此展示你的链接,或者个人主页!
元素币活跃度贡献值
元素王, 积分 11102, 距离下一级还需 18898 积分
元素王, 积分 11102, 距离下一级还需 18898 积分
在线时间171 小时
还没有设置签名!您可以在此展示你的链接,或者个人主页!
元素币活跃度贡献值
元素魔, 积分 2474, 距离下一级还需 2526 积分
元素魔, 积分 2474, 距离下一级还需 2526 积分
在线时间30 小时
楼主还在吗,为什么前两部的教程链接打开都是第三部的呢
还没有设置签名!您可以在此展示你的链接,或者个人主页!
元素币活跃度贡献值
元素师, 积分 345, 距离下一级还需 155 积分
元素师, 积分 345, 距离下一级还需 155 积分
在线时间0 小时
先围观,再马克,回复攒币,最后入手
还没有设置签名!您可以在此展示你的链接,或者个人主页!
【拥有1000元素币】你就可以领取
【拥有3000元素币】其实也是很容易的事情
【1W元素币】的持有者,对于很多元素者来说,是一件值得骄傲的事情!
【50小时】的学习,已经证明了你自己,这件法袍是你的了,由于使用了简陋的材料,能穿一个月已经不错了!
加入【元素6月】在元素冒险的时候,你一定会用到它,尤其是在遇到像小强这种可怕生物时
达成成就【我是界王】在任意元素QQ群联盟,到达【界王】以上
达成成就【我超神了】在 QQ群内名称与论坛一致!并到达【超神】级别
平时一次性兑换土豪金超过3000,圣诞节期间一次性兑换土豪金超过500即可获取!
【贡献50】这只是一颗普通的珍珠,但是戴在你的手指上,能使你魅力提升不少呦
【贡献100】虽然黄金的价位在跌,但是真金不怕火炼,金子始终是金子
【贡献200】如果你还在抱怨自己在摇奖的时候人品不好,不如试试这个,也许真的有用
【5W元素币】的持有者是真的土豪!赶快用它做点什么吧!
【拥有10W元素币】才可以获得,您已经富可敌国了,钱对你来说只是一个数字,没有任何别的意义!
升级到【星球·资源帝】
【MP50】这次的冒险才刚刚开始,和所有故事一样,你得先有一个属于自己的法杖!即使他的法力会在30天后消失
达成成就【中级追猎者】在元素悬赏中30次被评为最佳答案 ,双十二特别礼品
元素推荐-友情提示 /1
每周一次的扩散大招带来更多元素币收益!
快速登录:
收藏帖子(7)
周一至周日:08:00-22:00
积分和充值
&2014&&. All rights reserved. (【Unity算法实现】简单回溯法随机生成 Tile Based 迷宫 - 简书
【Unity算法实现】简单回溯法随机生成 Tile Based 迷宫
算法学习自 作者eastecho 在IndieNova上发表的文章
,我只是简单做了一下Unity的实现。
基础算法的简单说明
简单说明一下算法步骤:
先生成基础地图。
选择基础地图的一个点(一个格子),将它标记为已访问过的,并将这个点加入到堆栈中储存起来。
取出堆栈顶的这个点作为基准点,检查附近有没有未访问过的点。
如果附近有未访问过的点,则随机选取其中的一个点,将它标记为已访问过的,并加入到堆栈中储存。
重复第二步,直到出现一个点,基于这个点在附近找不到未访问过的点了。
将这个堆栈顶部的点移除,基于新的顶部的点重复第二步。
当堆栈为空时,说明迷宫已经生成完毕。
经过以上步骤,我们就可以得到一个完美迷宫,从迷宫中的任何一点都可以到达迷宫中的另外一点。这个算法就像是忒修斯走米诺斯迷宫,进入迷宫时将毛线头系在迷宫入口,然后随意走向能走的地方,直到走到了死胡同,就顺着毛线返回到上一个还能走的地方。而我们的算法则像是在空地顺着路线摆砖块,直到摆不了砖块了便返回上一个可以摆砖块的地方继续摆砖块。
适合Tile Based地图的改进算法
我们先假设我们希望生成的迷宫中有两种大小相同的部件,墙 和 地面。墙是不能移动到的部分,地面是玩家可以移动的部分。假如未被访问的点是墙,已被访问的点是地面,我们的算法也可以看作是一个人在布满墙的空间里挖路。这个时候我们发现,如果使用上一个算法,找到身边可以挖开的墙壁然后挖开,最后所有的墙壁都会被我们凿开。所以我们需要为我们的墙壁预留空间。我们稍加改良。简单说明一下改良后的算法步骤:
先生成基础地图。
选择基础地图的一个点(一个格子),将它标记为已访问过的,并将这个点加入到堆栈中储存起来。
取出堆栈顶的这个点作为基准点,检查有没有与这个点相隔一个格子距离,同时又未访问过的点。
如果有这样的点,则随机选取其中的一个点,将它标记为已访问过的,并加入到堆栈中储存。
将这两个点之间的也标记为已访问过的点,但不将这个点放入堆栈。所以需注意,这个时候堆栈顶部的点是刚才检查到的,距离一个格子的点,而不是附近的这个点。将中间这个点设置为已访问的作用是连通当前点和下一个目标点。
重复第二步,直到出现一个点,基于这个点在附近距离一个格子的范围找不到未访问过的点了。
将这个堆栈顶部的点移除,基于新的顶部的点重复第二步。
当堆栈为空时,说明迷宫已经生成完毕。
不同的地方在于查找下一个目标点的时候,跳过了一个格子。最后只要将已访问过的点设置为路面,将未访问过的点设置为墙面就可以完成迷宫的生成了。
首先我们先说明一下变量
//需要生成地图的行数
public int row = 35;
//需要生成地图的列数
public int column = 30;
//生成地图的基准点
public Vector2 originP
//格子之间的偏移
//地面格子预设
public GameObject floorP
//墙壁格子预设
public GameObject wallP
//迷宫的逻辑地图
private int[,] _
//根据逻辑地图生成的实际地图
private GameObject[,] _
//储存目标点的容器
private List&Vector2& _moves = new List&Vector2&();
首先我们初始化逻辑地图和实际地图两个地图,然后以(0,0)为起始点开始找寻下一个目标点。即,我们从(0,0)开始挖墙。
void Start()
//初始化地形
InitTerrain();
void InitTerrain()
//初始化逻辑地图
_maze = new int[row, column];
//初始化实际地图
_map = new GameObject[row, column];
//以(0,0)为基准点开始查找目标点生成迷宫
QueryRoad(0, 0);
接下来我们来看看关键的挖墙部分
void QueryRoad(int r, int c)
string dirs = "";
//检查北面的格子是否被访问
if ((r - 2 &= 0) && (_maze[r - 2, c] == 0)) dirs += "N";
//检查西面的格子是否被访问
if ((c - 2 &= 0) && (_maze[r, c - 2] == 0)) dirs += "W";
//检查南面的格子是否被访问
if ((r + 2 & row) && (_maze[r + 2, c] == 0)) dirs += "S";
//检查东面的格子是否被访问
if ((c + 2 & column) && (_maze[r, c + 2] == 0)) dirs += "E";
//如果方位为空,则说明没有未访问的格子了
if (dirs == "")
//删除顶上的这个格子
_moves.RemoveAt(_moves.Count - 1);
if (_moves.Count == 0)
//如果容器空了,说明迷宫生成完毕,可以开始绘制迷宫了
DrawTerrain();
//否则基于新的点,继续查找下一个目标点
QueryRoad((int)_moves[_moves.Count - 1].x, (int)_moves[_moves.Count - 1].y);
//随机一个可以被访问的点
int ran = Random.Range(0, dirs.Length);
char dir = dirs[ran];
//连通目标点和当前点之间的这个点
switch (dir)
//将中间这个点设置为已访问的
_maze[r, c + 1] = 1;
c = c + 2;
//将中间这个点设置为已访问的
_maze[r + 1, c] = 1;
r = r + 2;
//将中间这个点设置为已访问的
_maze[r, c - 1] = 1;
c = c - 2;
//将中间这个点设置为已访问的
_maze[r - 1, c] = 1;
r = r - 2;
//将这个新的目标点设置为已访问的
_maze[r, c] = 1;
//将这个新的目标点加入容器
_moves.Add(new Vector2(r, c));
//基于新的点,继续查找下一个目标点
QueryRoad(r, c);
算法原理和之前叙述的是一样的。最后只需要将实际地图根据逻辑地图绘制出来就好了。
void DrawTerrain()
for (int i = 0; i & i++)
for (int j = 0; j & j++)
switch (_maze[i, j])
if (_map[i, j] != null)
if (_map[i, j].tag == "Floor")
}else if (_map[i, j].tag == "Wall")
Destroy(_map[i, j]);
_map[i, j] =
_map[i, j] = Instantiate(floorPrefab, originPoint + new Vector2(j * offset, i * offset), Quaternion.identity);
if (_map[i, j] != null)
if (_map[i, j].tag == "Wall")
else if (_map[i, j].tag == "Floor")
Destroy(_map[i, j]);
_map[i, j] =
_map[i, j] = Instantiate(wallPrefab, originPoint + new Vector2(j * offset, i * offset), Quaternion.identity);
如何让绘制迷宫的过程可见
迷宫一下就出现难免有些无趣,毕竟看着空无一物的地图逐渐被道路充满也是一种乐趣。我真心觉得看着迷宫渐渐生成非常令人愉悦。所以提供一种让迷宫的生成可见的方法。
//用来储存目标点
private Vector2 _currentP
这是关键变量,将之前的递归改为一帧一次,相当于每一帧挖一块墙,获取到了新的目标点之后不会立刻找下一个,而是等到下一帧再执行。
记得增加执行条件,以免无限执行查找。
我这里设置成如果这个点是(-1,-1)则不执行查找。当我在绘制完成最后的实际地图后会将这个点设置成(-1,-1)。
那么首先我们对初始化的部分进行一点修改。
void InitTerrain()
_maze = new int[row, column];
_map = new GameObject[row, column];
//初始化时先将目标点设置为(0,0)
_currentPoint = new Vector2(0, 0);
然后我们每一帧根据当前的目标点查找下一个目标点。
void Update()
//如果当前目标点_currentPoint是合法的话就查找下一个目标点
if (_currentPoint != new Vector2(-1, -1))
QueryRoad((int) _currentPoint.x, (int) _currentPoint.y);
然后我们的查找目标点也从递归改成仅仅查找下一个目标点。
//修改查找部分,取消递归。
void QueryRoad(int x, int y)
string dirs = "";
if ((x - 2 &= 0) && (_maze[x - 2, y] == 0)) dirs += "N";
if ((y - 2 &= 0) && (_maze[x, y - 2] == 0)) dirs += "W";
if ((x + 2 & row) && (_maze[x + 2, y] == 0)) dirs += "S";
if ((y + 2 & column) && (_maze[x, y + 2] == 0)) dirs += "E";
if (dirs == "")
_moves.RemoveAt(_moves.Count - 1);
if (_moves.Count == 0)
DrawTerrain();
//这是最后一个点了,这个点以外已经没有符合条件的点,所以在这次绘制完毕后将不再执行查找。
_currentPoint = new Vector2(-1, -1);
//这里取消递归,改为设置目标点,下一帧再处理这个目标点
//QueryRoad((int) _moves[_moves.Count - 1].x, (int) _moves[_moves.Count - 1].y);
//因为这个目标点附近已经没有符合要求的点了,所以找到上一个点,并将其设置为新的目标基点。
_currentPoint = _moves[_moves.Count - 1];
int ran = Random.Range(0, dirs.Length);
char dir = dirs[ran];
switch (dir)
_maze[x, y + 1] = 1;
y = y + 2;
_maze[x + 1, y] = 1;
x = x + 2;
_maze[x, y - 1] = 1;
y = y - 2;
_maze[x - 1, y] = 1;
x = x - 2;
_maze[x, y] = 1;
_moves.Add(new Vector2(x, y));
//这里依然取消递归
//QueryRoad(x, y);
//这里将目标基点_currentPoint设置为新的目标点。
_currentPoint = new Vector2(x, y);
//每一次找到了新的目标点都要绘制一次实际地图
DrawTerrain();
每一次找到了新的目标点都要绘制一次实际地图,这样才能把你挖通的道路显示出来。
下一步就是绘制地图部分,这一部分没有什么变化。
void DrawTerrain()
for (int i = 0; i & i++)
for (int j = 0; j & j++)
switch (_maze[i, j])
if (_map[i, j] != null)
if (_map[i, j].tag == "Floor")
}else if (_map[i, j].tag == "Wall")
Destroy(_map[i, j]);
_map[i, j] =
_map[i, j] = Instantiate(floorPrefab, originPoint + new Vector2(j * offset, i * offset), Quaternion.identity);
if (_map[i, j] != null)
if (_map[i, j].tag == "Wall")
else if (_map[i, j].tag == "Floor")
Destroy(_map[i, j]);
_map[i, j] =
_map[i, j] = Instantiate(wallPrefab, originPoint + new Vector2(j * offset, i * offset), Quaternion.identity);
大家可以自己尝试一下这种生成迷宫的方法。如果大家有什么问题或者指教,也欢迎来与我交流。

我要回帖

更多关于 unity随机迷宫 的文章

 

随机推荐