楼主在2021年注册了妖狸替账号,2024年年末因为学业相关事务需要学习和使用Unity。在经过将近半年的摸爬滚打之后,已初步具备一定的研发能力(大雾).
- 长期更新,但时不时会咕
- 开发环境:Unity 2022.3.52f1
楼主在2021年注册了妖狸替账号,2024年年末因为学业相关事务需要学习和使用Unity。在经过将近半年的摸爬滚打之后,已初步具备一定的研发能力(大雾).
先来点抽象数据结构设计:
走格子的地图,其数据结构的初步设计大致思路是:
grids: [
{id: 0,layer:0, left: -1, right: -1, top: -1, bottom: -1, content: {...}, jump: -1},
{id: 1,layer:0, left: -1, right: -1, top: -1, bottom: -1, content: {...}, jump: -1},
{id: 2,layer:0, left: -1, right: -1, top: -1, bottom: -1, content: {...}, jump: -1},
{id: 3,layer:0, left: -1, right: -1, top: -1, bottom: -1, content: {...}, jump: -1},
……
]
每个格子都有自己的单独的非负数 id,
一个地图可以存在多层,layer表示其所在层数
jump表示这个格子可以跳转的格子的id
left、 right、 top、 bottom 属性分别代表与该格子相邻的格子的id,
content 就是每个格子拥有的内容,比如我们的角色、金币、敌人等等。
不同的格子内容,其具体效果是不同的。
我的半吊子编程水平,让我认为应该尝试使用多态。
大致实现思路,就这样:
public abstract class GridContent {...}
public class Enemy : GridContent
{...}
public class Coin : GridContent
{...}
public class Trap : GridContent
{...}
接着初步设计格子的管理类。
因为楼主本人太菜,格子直接使用2d贴图来表现
//头文件忽略
public class MapGrid : MonoBehaviour
{
[SerializeField] private Sprite FrameSprite;
[SerializeField] private SpriteRenderer Frame;
[SerializeField] private MapGridContent GridContent;
private void Awake()
{
SetFrameImage(GridFrame);
}
public void SetFrameImage(Sprite frameImage)
{
Frame.sprite = framImage;
}
public void SetLocation(Vector3 position)
{
gameObject.anchoredPosition = position;
}
}
游戏场景初始化时,会设置好格子边框的贴图。
SetLocation
函数可以设置每个格子的具体位置。
坛友们,今天先开个头
后续更新思路是:
楼主所在的 🇳🇿 有比较特殊的中期休息机制,所以才有时间整花活。
今天我还要过铁道的主线剧情
期待一下二创小游戏
是大佬,期待大佬的成品
好欸,期待期待
楼主因为之前的时间太过紧张,最近还要大赶特赶游戏进度
还要啃火山地图和星穹铁道的地图
期待,也学习观摩
楼主回来了,经过实操,
格子预制体的设计和实现,虽然很塑料,还是耗费了亿点点时间和精力。(大嘘)
1234
,这个地方对于不同的格子,会有不同的图案楼主这边开始敲代码了,但今天上午只敲了一点点:
GridMap
存储地图格子的相关数据GridContent
是所有地图格子内容的基类,GridContentEmpty
是其子类,代表一个不会触发任何事件的空格子。在后续开发中,每个格子内容都需要定义不同的类控制其逻辑AllGridContentList
存储所有不同格子内容相关数据,以供 GridMapDisplayManager
调用GridMapDisplayManager
就是负责显示和初始化格子地图的管理类格子地图的数据结构如上图所示。Grids
是一个存储格子信息的列表。
很明显,在 Unity 上直接编辑格子地图的数据信息,是不方便的。
所以,新的思路和解决方法马上出来了:
Excel
中编辑或者创建格子地图csv
文件csv
文件的数据导入 Unity 中所以,需要定义新的 GridMapImporter
类,帮助我们将 csv 文件导入和转换为我们需要的格子地图数据
今天暂时就这些。
因为制作地图格子预制体那个步骤,花的时间稍微长了点。
下午开始啃原神地图宝箱。
远古圣山的地图差了几个宝箱,不管了
自我反思、优化和灵感,有些时候是突然出现的,可能需要一个契机。
灵感和改进思路来得十分意外。修改格子的数据结构:
//格子原本的数据结构:
{id: 0,layer:0, left: -1, right: -1, top: -1, bottom: -1, content: {...}, jump: -1}
//格子新的数据结构:
{id: 0,layer:0,
row: 0, column: 0, // 添加两个整数,分别代表其在二维数组的行索引和列索引
left: -1, right: -1, top: -1, bottom: -1, //原本的四个属性可以废弃使用,也可以暂时保留
content: {...}, jump: -1}
一些小问题的解决,不需要什么惊天动人的大创新,而是 “小灵感”
今天还可以再发一两帖。
先是一句比较重要的话,
一个逻辑自洽的游戏,不管体量大小,与核心玩法对应的UI设计,其工作量和重要性不可忽视
这话听起来可能莫名其妙,但是,他山之石,可以攻玉。
绝区零恰好就是这个例子。
这是工作簿、空洞见闻界面
看看走格子的界面: