如何创建自定义瓦片

选用待继承的瓦片

编写自定义瓦片其实就是通过继承 Unity 原有瓦片, 并添加新数据来创建自己的瓦片, 因此首先需要选用待继承的瓦片, 这个根据项目的需要选择即可.

如果瓦片需要播放动画, 便需要继承动画瓦片, 需要使用预制体就继承预制体瓦片, 需要使用普通瓦片, 随机瓦片, 规则瓦片时都可以继承自规则瓦片.

添加自定义数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using System;
using UnityEngine;

/// <summary>
/// 魔剑镇魂曲瓦片, 继承自 RuleTile
/// </summary>
[Serializable]
[CreateAssetMenu(fileName = "New Sword Requiem Tile.asset", menuName = "Sword Requiem Tile")]
public class SwordRequiemTile : RuleTile
{
/// <summary>
/// 枚举: 地形类型
/// </summary>
public EM_Terrain defaultTerrainType;
}

上面是我自定义的 Sword Requiem Tile, 只添加了一个简单的枚举类型数据.

  • Serializable: 标记此类可以被序列化.

  • CreateAssetMenu: 标记此脚本可以在资源菜单中直接创建, 创建的默认文件为: New Sword Requiem Tile.asset, 菜单项的路径为: Sword Requiem Tile.

  • SwordRequiemTile: 继承自规则瓦片的自定义瓦片的类型名称.

  • defaultTerrainType: 自定义数据-默认地形类型.

[] 这个地方有一个挺大的坑, 可以看到我这里的自定义数据使用的是 '字段' 而非 '属性', 因为使用属性, Inspector 面板中便无法持久保存瓦片属性.

表现在项目中就是, 首先创建枚举, '森林' 的枚举值为 0, '断层' 为 1, 我创建了一个 Sword Requiem Tile, 默认地形类型自动初始化为 '森林', 然后修改瓦片的地形类型为 '断层', 之后绘制地形, 运行游戏, 发现一切正常, 但是一旦关闭 Unity, 再次打开时所有瓦片的自定义数据全部会被重置为 '森林', 即默认值, 想想这个多可怕!

以上情况不知道是不是我自己的失误, 总之这里使用原始的字段不会有任何问题.