Unity 3d List <>在android中不起作用,但在Unity Editor中可以正常工作

时间:2018-07-27 16:54:37

标签: c# android list unity3d

我在List中创建了GameObjects,称为检查点。首先,所有GameObjects在编辑器中都设置为无效。播放器启动事件后,checkpoint个序列将被依次激活。当车辆触发checkpoint时,下一个checkpoint被激活。在Unity Play模式下一切正常,没有任何错误或警告。

但是,在Android版本中,以下语句checkPoints[currentCheckPoint].SetActive(true);不起作用,并且之后的所有代码也不会执行。我只发布相关的代码,因为完整的脚本有点长。

public List<GameObject> checkPoints;

static int tottalCheckPoints = 0;
int currentCheckPoint = 0;

private void Start()
{
    tottalCheckPoints = transform.childCount;
    for (int i = 0; i < tottalCheckPoints; i++)
    {
        if (transform.GetChild(i).tag == "CheckPoint" || transform.GetChild(i).tag == "FinaleCheckPoint")
        {
            checkPoints.Add(transform.GetChild(i).gameObject);
        }
    }
}

public void CheckPointTriggered()
{
    if (currentCheckPoint < tottalCheckPoints)
    {
        checkPoints[currentCheckPoint].SetActive(true); /*<------ that statement and all the statements after that doesn't get executed in android build.*/
        currentCheckPoint++;
    }
}

我在Android中使用文本记录功能,通过在每个语句之后在屏幕上打印特定文本来查看代码停止工作的地方,并发现以下语句未执行(或之后的任何其他语句)。 checkPoints[currentCheckPoint].SetActive(true);

我正在使用最新版本的Unity 2018.1.4.f1。

3 个答案:

答案 0 :(得分:0)

在这里考虑要考虑的事情。

static int tottalCheckPoints = 0; int currentCheckPoint = 0;

private void Start() {
    tottalCheckPoints = transform.childCount;
    for (int i = 0; i < tottalCheckPoints; i++)
    {
        if (transform.GetChild(i).tag == "CheckPoint" || transform.GetChild(i).tag == "FinaleCheckPoint")
        {
            checkPoints.Add(transform.GetChild(i).gameObject);
        }
    } }

您正在将检查点的总数设置为当前游戏对象中子代的总数。然后,只有标记为“ CheckPoint”或“ FinaleCheckPoint”的检查点才可以添加。

这意味着您的totalCheckPoints可能大于CheckPoint列表长度。仅当每个孩子都具有这两个标签之一时,该标签才会匹配。

if (currentCheckPoint < tottalCheckPoints)
{
    checkPoints[currentCheckPoint].SetActive(true); /*<------ that statement and all the statements after that doesn't get executed in android build.*/
    currentCheckPoint++;
}

在这里,检查currentCheckPoint和tottalCheckPoints的值,看它们是否有意义。您已将tottalCheckPoints设为静态,因此当您不打算更改它时,它可能会在其他位置更改。

没有看到更多细节,很难说更多。当您处于编辑器模式时,您的场景中可能会有一些项目在您的构建版本中不存在(例如,可能加载了其他场景),这会导致此问题,但我们不能在这里告诉您。

答案 1 :(得分:0)

有零个理由可以在Windows版本中运行,而不能在android版本中运行,但是在OnValidate中执行操作是导致我的版本无法运行的第一原因。 Windows构建正常吗?我的赌注将是“否”,我的押注原因是“您正在OnValidate()中执行不应在此处执行的操作。它是如此的便捷,以至于在我得知我有几个项目由于这个原因而延迟部署之前。当场景在编辑器BY BY EDITOR中启动时触发OnValidate,但在buildever中未调用过ever。请检查并支持,如果有帮助。

在某些情况下,我只是将OnValidate()调用添加到Start()中,从而解决了该问题

答案 2 :(得分:0)

Finlay,问题已解决。 Unity编辑器或我不知道的计算机出现问题。我已多次重启Unity,但问题仍未解决。我通常不经常关闭计算机。因此,今天我重新启动计算机并重新构建,并且所有内容也开始在构建中工作。