【发布时间】:2020-07-23 19:37:50
【问题描述】:
我正在尝试制作一款建筑游戏,您可以在其中建造任何没有建筑且接触地面的地方。这是我的代码
private void Update()
{
if (buildMode)
{
playerScript.enabled = false;
Vector3 point = Camera.main.ScreenToWorldPoint(Input.mousePosition);
if (Input.GetMouseButtonDown(0))
{
buildOverlay.ClearAllTiles();
Vector3Int selectedTile = buildOverlay.WorldToCell(point);
selectedTile.z = 0;
if (Vector3.Distance(GameObject.Find("Player").transform.position, selectedTile) < buildDistance)
{
//BoundsInt bounds = collidableTilemap.cellBounds;
//TileBase[] allTiles = collidableTilemap.GetTilesBlock(bounds);
//for (int x = 0; x < bounds.size.x; x++)
//{
// for (int y = 0; y < bounds.size.y; y++)
// {
// TileBase tile = allTiles[x + y * bounds.size.x];
// Debug.Log(collidableTilemap.HasTile(new Vector3Int(x, y, 0)));
// if (collidableTilemap.HasTile(new Vector3Int(x, y, 0)))
// {
// buildOverlay.SetTile(selectedTile, notplaceable);
// }
// else
// {
// buildOverlay.SetTile(selectedTile, placeable);
// }
// }
//}
selectedTile.z = 0;
Debug.Log(selectedTile);
Debug.Log(collidableTilemap.HasTile(selectedTile));
if (!collidableTilemap.HasTile(selectedTile))
{
buildOverlay.SetTile(selectedTile, placeable);
}
else
{
buildOverlay.SetTile(selectedTile, notplaceable);
}
}
}
else
{
playerScript.enabled = true;
}
}
}
到目前为止,此代码所做的是关闭移动和检查重叠图块的功能。我目前将变量 buildDistance 设置为无穷大,所以这不是问题。
这里有一些图片:
Unity 认为第一层不存在。这是证明这些块在同一个tilemap中的场景视图:
此代码应该查看玩家想要放置的坐标中是否存在图块。除了第一层外,它工作正常。请帮忙!
我对 Unity 还很陌生,所以不要介意我的菜鸟错误。谢谢!
[编辑]:我稍微改变了我的地形,并意识到了一些新的东西:
这个方块是红色的
这个方块是绿色的。
我不能在这一排的任何地方建造,除了石头结束时:
我可以在这里建造:
发生了什么!!!!!!?????????
【问题讨论】:
-
这是否也发生在地图最左边或最右边的瓦片上,或者只是顶层?你可以在地下的第一个空白线上放置一个瓷砖吗?
-
@Jake 我已根据您提出的信息更新了我的问题。怎么回事!!??!