Unity 社区
207
38

创建Roguelike随机地下城(一)

M STUDIO
Unity 价值专家|零基础入门砸门人|毕设拯救者
阅读 9329
2020年2月2日
徒手打造Roguelike风格游戏的随机地下城(一):建立随机房间
先上效果图,你就知道是不是你想要收藏的宝藏文章啦~😜
利用《夜勤人》游戏相关素材模拟创建随机地下城房间
是不是应该点赞收藏一气呵成~哈哈哈
不废话了,这个系列分几个部分完成,所以要继续关注和支持我哦~下雪大家
第一个部分:创建基本房间并生成随机算法
思路:建立一个空的 GameObject 用来做创建房间的点,设置坐标(0,0,0)。每创建1个房间之后,随机在上、下、右判断是否有房间,若没有就创建一个新的房间;若已经有房间,则再次随机切换周围四个方向位置。代码如下:
首先利用枚举来获得四个方向:
public enum Direction { up, down, left, right }; public Direction direction;
切换位置要判断是否有房间,所以基础房间要挂在 BoxCollider2D 并设置为 trigger。然后循环判断检测有房间则继续切换位置:
public void ChangePointPos() { do { direction = (Direction)Random.Range(0, 4); switch (direction) { case Direction.up: generatorPoint.position += new Vector3(0, yOffset, 0); break; case Direction.down: generatorPoint.position += new Vector3(0, -yOffset, 0); break; case Direction.left: generatorPoint.position += new Vector3(-xOffset, 0, 0); break; case Direction.right: generatorPoint.position += new Vector3(xOffset, 0, 0); break; } } while (Physics2D.OverlapCircle(generatorPoint.position, 0.2f, roomLayer)); }
其中 xOffse 和 yOffset 是可以更改的 float 型变量,用来修改两个房间的位移位置的。
有了切换坐标的方法,我创建一个房间并存储为 Prefab 预制体,在 Start( ) 方法里循环生成指定数量(roomNumber)的房间并添加到一个列表 rooms 里:
void Start() { for (int i = 0; i < roomNumber; i++) { rooms.Add(Instantiate(roomPrefab, generatorPoint.position, Quaternion.identity)); //改变point位置 ChangePointPos(); } rooms[0].GetComponent().color = startColor;//改变第1个房间的颜色 }
至此可以创建随机数量的房间了!
素材及视频讲解记得来看我的B站哦~记得帮我转发哦~谢谢大家!
视频地址:
https://www.bilibili.com/video/av85927856 https://www.bilibili.com/video/av85927856
简单房间素材:
Map_Rooms.zip
748.0 Bytes
如何找到最后的房间设置为结束房间的方法,请关注期待下一期哦~
发布于技术交流
38条评论

AI

全新AI功能上线

1. 基于Unity微调:专为Unity优化,提供精准高效的支持。

2. 深度集成:内置于团结引擎,随时查阅与学习。

3. 多功能支持:全面解决技术问题与学习需求。

AI