0

我有多个玩家的游戏,每个用户在游戏开始前选择他们的英雄,然后将选定的英雄加载到战场上。

让实例化以正确数量的玩家生成我有一个小问题我用于生成角色的方法:

private void Placement()
    {
                for (int i = 0; i < SelectedCards.Count; i++)
                {
                     for (int t = 0; t < AvailableHeroes.Count; t++)
                         {
                if (AvailableHeroes[t].name == SelectedCards[i].name)
                {
                    Debug.Log(AvailableHeroes[t]);
                       // Instantiate(AvailableHeroes[t], PlayerSpawnLocation[t].transform.position, transform.rotation);
                }
                {
                }
            }
        }
    }

该脚本检查所选英雄卡的数量并将其放在我的列表中,该列表包含所有可用英雄可供选择(预制件)。debug.log 显示只有正确的英雄被调用。实例化最终会产生大量英雄而不是选定数量。

为了清楚起见,我附上了完整的课程:

{

    private int playerSize;                     //amount of choices for card selection

    private GameManager GM;
    [Header("Lists for Spawning in Heroes")]
    public List<GameObject> SelectedCards;
    public List<GameObject> AvailableHeroes;
    public List<Transform> PlayerSpawnLocation;
    [Header("Canvas used for the game")]
    public Transform GameCanvas;
    public Transform CharacterCanvas;

    //When scene starts it takes how many players will be picking a card.
    void Start()
    {
        //connects this script with gamenmanager to be able to manipulate the cameras
        GM = GameObject.Find("GameManager").GetComponent<GameManager>();
        //gets playersize information from main menu selection
        PlayerPrefs.GetInt("PlayerSize");
        playerSize = PlayerPrefs.GetInt("PlayerSize");
        SelectedCards = new List<GameObject>();
        //enables/disables correct canvas not to cause any problems when we initiate this scene
        GameCanvas.gameObject.SetActive(false);
        CharacterCanvas.gameObject.SetActive(true);
    }

    // Update is called once per frame
    void Update()
    {
        if (playerSize <= 0)
        {
            Placement();
            GM.CharacterSelectionCamera.enabled = false;
            GameCanvas.gameObject.SetActive(true);
            CharacterCanvas.gameObject.SetActive(false);
            GM.BattleCamera.enabled = true;
        }
    }

    public void PlayerSelected(int cardPicked)
    {
        playerSize -= cardPicked;
    }

    private void Placement()
    {
                for (int i = 0; i < SelectedCards.Count; i++)
                {
                     for (int t = 0; t < AvailableHeroes.Count; t++)
                         {
                if (AvailableHeroes[t].name == SelectedCards[i].name)
                {
                    Debug.Log(AvailableHeroes[t]);
                       // Instantiate(AvailableHeroes[t], PlayerSpawnLocation[t].transform.position, transform.rotation);
                }
                {
                }
            }
        }
    }
}

我希望有人能解释我在哪里出错了。谢谢,

4

2 回答 2

1

我得到了答案,我想我只是工作累了,看不到明显的东西。对于那些想知道解决方案是什么的人 该方法在每一帧都被调用,因此它会继续无休止地产生对象 有两种方法可以修复它 1制作协程,然后在您进行初始批处理后返回 2在更新时使用布尔值,因此它不仅会检查播放器大小,但无论何时它是否可以生成,在调用方法后将布尔值设置为 false。

于 2017-11-12T21:20:29.673 回答
0

我什至没有注意到更新功能部分。请注意,在您的启动功能中,PlayerPrefs.GetInt("PlayerSize"); 没有做任何事情,因为该值没有保存在任何地方。

于 2017-11-12T21:22:56.253 回答