初始化obs/Unity仓库
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
保存地图场景,顾名思义,他的本质就是保存,将我们的房间数据保存到另一个物体当中,并且我们可以从这个物体中读取数据.
|
||||
|
||||
我们已经使用过了scriptableobject,知道他是一种数据容器,可以储存和保存数据,因此考虑使用SO文件来储存地图数据.
|
||||
|
||||
我们需要保存的地图数据只有2个,第一个是房间,第二是连线.地图当中有非常非常多的房间和连线,所以我们肯定会使用列表来储存,但是没有一种类型可以支持我们储存这些数据,因此我们需要创建一个自定义的类来储存房间和连线.
|
||||
|
||||
我们先考虑一下储存房间需要哪些信息,他的行和列,他的X.Y坐标,以及他的roomData数据和RoomState.那我们的连线呢?只需要保存他的起始坐标和终止坐标就可以了.虽然我们的游戏是2D的,但是连线的位置坐标却是3D的,vector3类型的无法被序列化,我们需要创建一个可以帮助v3序列化的工具类.
|
||||
|
||||
```
|
||||
using UnityEngine;
|
||||
|
||||
[System.Serializable]
|
||||
|
||||
public class serializeVector3
|
||||
|
||||
{
|
||||
|
||||
public float x, y, z;
|
||||
|
||||
public serializeVector3(Vector3 vector3)
|
||||
|
||||
{
|
||||
|
||||
x = vector3.x;
|
||||
|
||||
y = vector3.y;
|
||||
|
||||
z = vector3.z;
|
||||
|
||||
}
|
||||
|
||||
public Vector3 ToVector3()
|
||||
|
||||
{
|
||||
|
||||
return new Vector3(x, y, z);
|
||||
|
||||
}
|
||||
|
||||
public Vector2 ToVector2Int()
|
||||
|
||||
{
|
||||
|
||||
return new Vector2((int)x, (int)y);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
这个类可以帮助我们序列化vector3.
|
||||
在想好了上述内容之后,我们创建MapLayout,他的代码如下
|
||||
|
||||
```
|
||||
public class MapLayoutSO : ScriptableObject
|
||||
|
||||
{
|
||||
|
||||
//创建两个列表,一个储存房间信息,一个储存连线信息
|
||||
|
||||
public List<MapRoomData> roomDataList = new List<MapRoomData>();
|
||||
|
||||
public List<MapLineData> lineDataList = new List<MapLineData>();
|
||||
|
||||
}
|
||||
|
||||
[System.Serializable]
|
||||
|
||||
public class MapRoomData
|
||||
|
||||
{
|
||||
|
||||
//我们要保存的房间的信息
|
||||
|
||||
public float PosX, PosY;
|
||||
|
||||
public int column, line;
|
||||
|
||||
public RoomDataSO roomData;
|
||||
|
||||
public RoomState roomState;
|
||||
|
||||
public List<Vector2Int> linkTo;
|
||||
|
||||
}
|
||||
|
||||
[System.Serializable]
|
||||
|
||||
public class MapLineData
|
||||
|
||||
{
|
||||
|
||||
//连线我们只需要知道他的起始坐标和结束坐标但是这些内容是vector3类型的
|
||||
|
||||
// vector3类型的无法被序列化,我们需要创建一个可以帮助v3序列化的工具类
|
||||
|
||||
public serializeVector3 startPos, endPos;
|
||||
|
||||
}
|
||||
```
|
||||
那么后面我们需要做的,是从rooms这个列表当中,循环读取,将他的内容储存到我们的SO文件当中.
|
||||
同时在创建地图的时候增加一层判断,如过我们的SO文件当中有数据,那么读取SO文件的数据,而不是从新创建地图.
|
||||
Reference in New Issue
Block a user