UNITY c#:根据用户选择产生角色预制件

时间:2017-11-12 19:09:04

标签: c# loops unity3d unity5 spawning

我有多个玩家的游戏,每个玩家在游戏开始前选择他们的英雄,并将选定的英雄加载到战斗舞台上。

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

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);
                }
                {
                }
            }
        }
    }
}

我希望有人可以解释我的错误。 谢谢,

2 个答案:

答案 0 :(得分:1)

我得到了答案,我想我只是因为工作而感到厌倦而无法看清楚。 对于那些想知道解决方案的人 每个帧调用该方法,因此它继续无休止地生成对象 有两种方法可以解决它 1 制作协同程序,然后在进行初始批处理后返回 2 在更新时使用布尔值,这样不仅可以检查播放器大小,还可以检查它是否可以生成它,在调用方法后,将布尔值设置为false。

答案 1 :(得分:0)

我甚至没有注意到更新功能部分。 在你的开始函数中,只是一个抬头,PlayerPrefs.GetInt(“PlayerSize”);没有做任何事情,因为价值没有保存在任何地方。