如何解决瓷砖呈现但不存在 Unity OnClick2D
我在删除十六进制图块时遇到问题。我确信我的十六进制位置方法适用于我的项目。我想创建易碎的瓷砖,并在每次指定的损坏时更改精灵。代码单独测试。
void NextTile()
{
if (currentTile == tiles.Length-1)
{
AddValue();
DestroyTile();
}
else
{
float offset = transform.parent.position.y;
Vector3Int pos = GetHexPosition(transform.position,offset);
tilemap.SetTile(pos,tiles[currentTile+1]);
Debug.Log("tile has been set,is it tile here?: " + tilemap.HasTile(GetHexPosition(transform.position,transform.parent.position.y)));
currentTile++;
}
}
void DestroyTile()
{
Vector3Int hexPos = GetHexPosition(transform.position,transform.parent.position.y);
tilemap.SetTile(hexPos,null);
Debug.Log("destroy tile ends,is it tile here?: " + tilemap.HasTile(hexPos));
}
我是否在脚本中创建此磁贴并不重要。 HasTile() 在将其设置为 null 后返回 false,但该磁贴仍然存在于游戏中(在暂停的游戏中,我什至可以手动删除它)。游戏对象被删除。
我找到了碰撞器的解决方案(下面的代码),但我真的很想使用 OnClick2D。
public void OnTriggerEnter2D(Collider2D collision)
{
if(collision.gameObject.tag == "Player")
{
AddScore();
StartCoroutine("DelayedDestroy");
}
}
void DestroyTile()
{
Tilemap tilemap = GetComponentInParent<Tilemap>();
Vector3Int pos = Vector3Int.FloorToInt(transform.position);
tilemap.SetTile(pos,null);
}
IEnumerator DelayedDestroy()
{
yield return new WaitForEndOfFrame();
Destroy(this.gameObject);
DestroyTile();
编辑: 我发现这个问题出在 SetTile() 方法上。
private void OnMouseDown()
{
Debug.Log("Clicked");
tilemap.SetTile(hexPos,null);
}
此代码在新项目和新瓦片地图上效果不佳。 hexPos 正在工作,因为我可以在那个地方设置其他瓷砖,但由于某种原因“null”没有从瓷砖地图中删除精灵。
编辑 2: 我找到了解决方案。对于统一的 tilemaps,在同一个地方可能有不止一次的 tile。当您使用画笔制作地图时,会将 Z 线设置为 0(或瓦片地图的 Z 位置?)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。