如何修复一次克隆太多实例而不是一个实例?

时间:2019-06-23 10:21:54

标签: c# unity3d

我正在做类似蛇的游戏,当我吃掉一个敌人时,我会创建一个新的预制件克隆。在我吃掉第一个敌人并拥有一个预制件和一个克隆之后,不是在主要的预制件之后只创建一个克隆,而是在我吃了第二个敌人之后,游戏创建了预制件的克隆和克隆的克隆。

我真的不明白为什么会发生,这是一个简短的代码,我找不到任何错误。我唯一的想法是,也许该脚本适用于每个克隆,而不仅仅是播放器。

private void createNewPiece()
{
    if(playerPieces.Count!=0)///which is the number of clones, not counting the player
        clone = Instantiate(player, playerPieces[playerPieces.Count-1].transform.position, Quaternion.identity);
    else
        clone = Instantiate(player, lastPlayerPosition, Quaternion.identity);

    playerPieces.Add(clone);

    addedNewPiece = true;
}
private void movePlayerPieces()
{
    if (addedNewPiece == false)
    {
        for (int i = playerPieces.Count - 1; i >= 1; i -= 1)
        {
            if (playerPieces[i] != null)
                playerPieces[i].transform.position = playerPieces[i - 1].transform.position;

            else Debug.Log("uhmm" + i);

        }

        if (playerPieces.Count >= 1 && playerPieces[0] != null)
            playerPieces[0].transform.position = lastPlayerPosition;
    }
    else
    {
        for (int i = playerPieces.Count - 2; i >= 1; i -= 1)
        {
            if (playerPieces[i] != null)
                playerPieces[i].transform.position = playerPieces[i - 1].transform.position;

            else Debug.Log("uhmm" + i);

        }

        if (playerPieces.Count >= 2 && playerPieces[0] != null)
            playerPieces[0].transform.position = lastPlayerPosition;
    }


}

我吃掉的敌人越多,下一个被吃掉的敌人就会创造出更多的克隆体,而不是每次都只创造一个。

1 个答案:

答案 0 :(得分:1)

您的蛇是由播放器预制件的克隆制成的,因此每个部分都有此脚本。 这意味着新的尾段还将在头部旁边生成另一个克隆。

尝试使用此脚本制作一个PlayerHead GameObject,并在不使用此脚本的情况下制作一个PlayerBody GameObject。