Unity学习笔记:Rule Tile、Advance Rule Overide Tile、Rule Override Tile的用法【By Chutianto】

首先来说一下为什么要有Rule Tile:

这个理由很简单,即增加开发者在场景搭建上效率,如果我们只是用静态的Tile,那么我们要场景搭建时,只能不断更换Tile资源,然而在设计场景搭建时,我们其实可以根据要将更改的格子四周的格子来推断当前的格子是要哪个Tile资源,而Rule Tile就提供了这个功能,我们不需要来回更改Tile资源就可以场景搭建;

注意:要创建Rule Tile资源的话,得先在Package Manager中下载2D Tile Extra;

下面是如何创建Rule Tile的搭建规则,即根据四周的网格中的Tile【可能没有Tile】来自动切换当前网格中的Tile;

我们先导入一个Tile资源,然后将其分割,与Rule Tile对象关联起来:

这里可以在Tiling Rule添加规则;

其中绿色箭头是指有Tile,红色叉是指无Tile【这里没检测每个网格里的Tile样式】,如果某个网格达到设置的要求就会将其设置为对应的Tile;

那么Rule Override Tile说白了就是完完全全继承别的Rule Tile的Tiling Rule;

我们创建一个Rule Override Tile:

然后将我们要继承的Rule Tile相关联即可,其中的瓦片资源是可以自定义的,只不过是Tiling Rule相同罢了;

与之对标是的Advance Rule Override Tile,这个不仅可以自定义瓦片资源,也可以在原有的Tiling Rule上进行更改,其与Rule Tile相关联的操作于上述一样,其修改Tiling Rule于在Rule Tile中定义规则是一样的;

实现这个功能,你需要使用Tilemap和RuleTile来表示陆地和海洋,然后在角色和船上添加Collider2D组件,用于检测碰撞。接下来,你可以在脚本中使用Tilemap API来检测角色和船所处的Tile,进而限制它们的移动。 以下是实现步骤: 1. 创建两个Tilemap,一个用于表示陆地,另一个用于表示海洋。在Unity编辑器中,选择GameObject -> 2D Object -> Tilemap来创建Tilemap。然后,选择Tile Palette窗口中的RuleTile来设置陆地和海洋的Tile。 2. 在角色和船上添加Collider2D组件。你可以使用BoxCollider2D或CircleCollider2D组件,根据具体需求来选择。 3. 在脚本中使用Tilemap API来检测角色和船所处的Tile。使用Tilemap.GetTile()方法可以获取指定位置的Tile,使用Tilemap.GetTileFlags()可以获取Tile的属性。例如,你可以使用以下代码来检测角色是否在陆地上: ```csharp Vector3Int cellPosition = landTilemap.WorldToCell(transform.position); TileBase tile = landTilemap.GetTile(cellPosition); if (tile != null && tile.GetType() == typeof(RuleTile)) { RuleTile ruleTile = (RuleTile)tile; if (ruleTile.TilingRuleOutput(0).m_RuleTransform.m_Flags == 1) { // 角色在陆地上,可以移动 } else { // 角色在非陆地上,禁止移动 } } ``` 类似地,你可以使用以上代码来检测船是否在海洋上。 4. 在脚本中使用角色控制和移动方法。当检测到角色在陆地上时,可以使用角色控制方法来移动角色。当检测到船在海洋上时,可以使用船只控制方法来移动船。 以上是实现人物只能在陆地ruleTile上移动,船只能在海洋ruleTile上移动的基本步骤。根据具体需求,你可以在代码中添加更多的逻辑来实现更多功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值