如何创建自定义瓦片

选用待继承的瓦片

编写自定义瓦片其实就是通过继承 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, 再次打开时所有瓦片的自定义数据全部会被重置为 '森林', 即默认值, 想想这个多可怕!

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

编写自定义瓦片的 Inspector 面板

之前使用 '属性' 作为自定义数据的时候编写了 Inspector 面板的脚本, 后来改用了 '字段' 之后就发现根本不用单独编写脚本了, Unity 会自动进行渲染...😅 这里就先不写 Inspector 面板该如何自定义了, 因为我也不会啊~ 留一个链接, 以便日后捡起来用.

自定义属性面板

更新

2021 年 3 月 16 日更新自定义 Inspector 面板, 见博客: Unity 自定义编辑器