我有多个玩家的游戏,每个玩家在游戏开始前选择他们的英雄,并将选定的英雄加载到战斗舞台上。
我有一个小问题,让实例化产生正确数量的玩家 我用于产生角色的方法:
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);
}
{
}
}
}
}
}
我希望有人可以解释我的错误。 谢谢,
答案 0 :(得分:1)
我得到了答案,我想我只是因为工作而感到厌倦而无法看清楚。 对于那些想知道解决方案的人 每个帧调用该方法,因此它继续无休止地生成对象 有两种方法可以解决它 1 制作协同程序,然后在进行初始批处理后返回 2 在更新时使用布尔值,这样不仅可以检查播放器大小,还可以检查它是否可以生成它,在调用方法后,将布尔值设置为false。
答案 1 :(得分:0)
我甚至没有注意到更新功能部分。 在你的开始函数中,只是一个抬头,PlayerPrefs.GetInt(“PlayerSize”);没有做任何事情,因为价值没有保存在任何地方。