gpt4 book ai didi

unity3d - 统一: Make a tile take up more grid cells

转载 作者:行者123 更新时间:2023-12-05 05:11:24 25 4
gpt4 key购买 nike

我正在尝试创建一个基本的塔防游戏,我将我的单元格大小设置为 0.5 X 和 0.5 Y(这样玩家可以更自由地放置他们的塔,想想 WC3)。

当我稍后在游戏中想要检查网格单元格是否被占用时,这会导致问题,因为有些单元格似乎被占用,但实际上并没有。

这是一张图片来说明我的问题:

Unity screenshot

黑色方 block 渲染超过 4 个单元格,但只有 1 个单元格被占用(黑色方 block 左下角的白色方 block )。

有没有其他人遇到过这个特殊问题并且知道如何解决这个问题,或者您是否有任何其他想要推荐的解决方案? :)

提前致谢!

最佳答案

虽然我不确定 unity Grid 组件是如何工作的,但我在我的一个基于网格的游戏中使用了以下方法。但是请注意,我为此实现了自己的网格,其中包含自定义网格图 block 。但也许相同的逻辑可以应用于统一网格

这个网格只是一个像这样制作的简单网格

for (int i = 0; i < terrainLength; i++)
{
for (int j = 0; j < terrainWidth; j++)
{
GameObject tile = Instantiate(gridTilePrefab, new Vector3(posX + i * gridCube.transform.localScale.x, posY + terrainHeight, posZ + j * gridCube.transform.localScale.z), Quaternion.identity);
tile.name = "grid[" + i + "," + j + "]";
tile.transform.parent = gridParent.transform;
}
}

这些网格 block 将有一个 bool 值 isOccupied。如果上面放置了一个对象,它将被设置为 true,否则将被设置为 false

为了检查它是否被占用,我会简单地从瓷砖的中心向上转换光线,并在 build 阶段检查是否有任何碰撞(在游戏过程中不需要做这些检查!)实现是一个简单的像这样:

Class GridTile
{
public bool isOccupied {get; private set;}

public void BuildStageLoop()//this loops like an update while we're in building stage
{
if (Physics.Raycast(transform.position, Vector3.up * 2, out hit))
{
tileOccupied = true;
}
else
{
tileOccupied = false;
}
}

}

在放置对象上,我只检查它下面的每个图 block 是否将 isOccupied 设置为 false。要检查它下面的瓷砖,我会使用您要放置的对象的宽度和长度向下执行 boxRayCast,并在对象下方延伸一点,以便它可以与网格瓷砖碰撞。

关于unity3d - 统一: Make a tile take up more grid cells,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55490240/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com