Tilemap-CustomRuleTile 的使用 Tile
Tile中添加属性字段是比较麻烦的-Tile的创建是由Unity3d创建的,类似于预制体,他不包含在Hierarchy栏目中,同时无法挂脚本,没办法做到赋值,也不能操作自定义属性
CustomRuleTile可以解决这个问题但是他使用起来比较麻烦,同时教程较少,官方文档中也没有合适的案例
首先确定版本
演示操作版本-2021.3.7f1c1
1 | GameObject tile = tilemap.GetInstantiatedObject(postion); |
使用该项获取游戏对象
以下案例是错误的,请勿使用该方案
创建一个CustomRuleTIle
生成文件
生成的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | [CreateAssetMenu] public class NewCustomRuleTile : RuleTile<NewCustomRuleTile.Neighbor> { public bool customField; public class Neighbor : RuleTile.TilingRule.Neighbor { public const int Null = 3; public const int NotNull = 4; } public override bool RuleMatch( int neighbor, TileBase tile) { switch (neighbor) { case Neighbor.Null: return tile == null ; case Neighbor.NotNull: return tile != null ; } return base .RuleMatch(neighbor, tile); } }在 |
代码中可以添加自定义属性
比如HP 同时我们把文件名改掉
在编译器中出现了
单击后生成一个Tile
在然后就可以拖动进调色板使用了 -同时他也支持创建规则
再然后编写代码进行试验
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | if (Input.GetKey(KeyCode.Backspace)) { //将世界坐标转换为TileMap坐标 var postion = tilemap.WorldToCell(transform.position); Debug.Log(postion); //获取指定的Tile TileBase tile = tilemap.GetTile(postion); //这种方式也是可以的 //TileBase tile1 = tilemap.GetTile<T89TileScript>(postion); Debug.Log(tile); if (tile is T89TileScript t89Script) { t89Script.HP--; Debug.Log(t89Script.HP); } } |
剩余可以跳过
-探讨其绑定过程
Script脚本如何与Tile进行绑定的
记事本打开文件
可以看到一串ID 用来定义脚本
打开Script文件
可以看到两个ID是一样的
当然也可以通过普通Tile来绑定 预制件 GameObject来操作
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!