unity3d Unity 3D中的赋值变量在编码过程中变为空,即使没有直接对其执行任何操作

wljmcqd8  于 2023-01-17  发布在  其他
关注(0)|答案(1)|浏览(162)

我在Unity中有一个建筑网格系统,它基于已经存在的TileMap系统。我有通过点击放置对象的系统,以及随机生成对象的系统。放置对象会将瓷砖涂成不同的颜色,以表明它已经被放置。
我正在尝试做一个系统,你可以删除放置的对象,这意味着瓦片图也需要更新,以反映删除。这根本不工作,并创造了一些问题,我从来没有遇到过,我不知道如何解决。
我有一个函数可以画瓷砖,它是这样的:

public void TakeArea(Vector3Int start, Vector3Int size)
{
    MainTilemap.BoxFill(start, tileName, start.x, start.y, start.x + size.x, start.y + size.y);  
}

这一切都适用于放置,但当我尝试使用OnClick函数时,我得到了一些错误。“start”和“size”被正确传递,当打印区域的值时,我得到了正确的值。这次的问题是“tileName”变量,因为当我尝试打印它时,它随机变为“Null”。即使在游戏本身我可以看到分配的值不是“空”,但它引用了一个应该绘制的瓦片。
几个小时以来我尝试了很多方法,但我想我终于找到了一个解决方案。我对该函数做了一些调整,使其与生成对象时完全相同,因为它已经工作,所以我首先使用以下代码示例化对象:

GameObject oreObj = Instantiate(prefab, poss, Quaternion.identity);

然后,我将从那里获得对象的位置和大小,就像我放置对象一样,因此它将是这样的:

Vector3Int start = gridLayout.WorldToCell(oreBeingRemoved.GetStartPosition());         TakeAreaWithTile(start, oreBeingRemoved.Size, emptyTile);

当我执行这些操作时,我得到一个错误消息
“尚未分配”BuildingSystem“的变量”grid“。您可能需要在检查器中分配”BuildingSystem“脚本的网格变量。”
问题是变量被赋值了,“网格”总是在编辑器中,就像我提到的那个平铺,但是它说由于某种原因它不是。
下面是截图:

我已经试着重写代码这么多次,我花了大约10个小时在这里,但似乎没有任何工作。

2eafrhcq

2eafrhcq1#

正如在注解中所说的,您所显示的行不包含变量的赋值或它们之间发生了什么,也不显示对象是如何示例化的。
有一件事可能是你的问题:预置只能通过引用自身或其他预置来序列化。对场景中其他对象的引用将丢失。修复方法是在BuildingSystem类的Awake方法中分配网格引用。

相关问题