Unity3D-无法获取其他游戏对象变量的值
本文关键字:变量 对象 其他游戏 获取 Unity3D- | 更新日期: 2023-09-27 18:02:23
我重新问这个问题,因为我第一次问的时候搞砸了。我们开始吧。我正在使用Unity3d制作《pokemon》。我目前正在制作生命值条。问题在于,它无法找到附加到单独游戏对象的变量值。以下是我的代码中不能工作的部分:
public Pokemon opponent;
public GameObject opponentTemp;
InitiateBattle opponentObject = opponentTemp.GetComponent<InitiateBattle>();
print (opponentObject);
opponent = opponentObject.PokemonToCatch;
print (opponent.Name);
TheirSlider.maxValue = opponent.Hp;
TheirSlider.value = opponent.CHp;
(注:Hp和CHp是我创建的类的一部分。如果你需要这方面的信息,我可以给你一些文件。
我要访问的是opponentObject.PokemonToCatch
。当我试图引用它时,什么也得不到。我试图从另一个游戏对象的脚本中引用它(因此这个问题的标题)。它似乎在我的脚本的这一部分工作,虽然;
UserParty = GameObject.Find ("UserData");
Party holdingPokemon = UserParty.GetComponent<Party>();
MySlider.maxValue = holdingPokemon.currentPokemon [0].Hp;
MySlider.value = holdingPokemon.currentPokemon [0].CHp;
对我来说,这似乎是一样的。除了这个,我只能找到这些了。如果需要PokemonToCatch
变量的代码,如下所示:
WildPokemon PokemonEncounter = NativePokemon.GetComponent<WildPokemon>();
public Pokemon PokemonToCatch;
for (int i = 0; i < 4; i++){
//print (i);
if (PokemonEncounter.CatchablePokemon [i].Find == GrassDat.TG){
print ("hit");
AvaliablePkmn.Add (PokemonEncounter.CatchablePokemon [i]);
//AvaliablePkmn [i] = PokemonEncounter.CatchablePokemon [i];
}
}
print (AvaliablePkmn.Count);
int number = Random.Range(0, (AvaliablePkmn.Count + 1));
PokemonToCatch = AvaliablePkmn [number];
print ("PokemonToCatchName:" + PokemonToCatch.Name);
//print (PokemonToCatch.Model);
PokemonToCatch.Model.transform.position = new Vector3 (30, 0, 5);
PokemonToCatch.Model.transform.Rotate (0, 250, 0);
总而言之,我试图从脚本访问opponentObject.PokemonToCatch
,但没有发现任何东西。它是空的。
提前感谢!
您需要为您试图引用的变量提供代码。另外,说"这里的代码块都不起作用"是非常模糊的。到底是什么不起作用?你没有得到什么价值?
撇开其他不谈,假设Hp和CHp是你不能引用的。我能给你的最好的答案是,你需要为你在原始脚本中试图访问的变量提供公共访问器。
public float HP {get { return Hp;} protected set; }
public float CHP {get { return CHp;} protected set; }
允许您在脚本外部公开访问hp和CHp值,但不允许您在脚本外部设置这些值。如果您需要更改hp值,您可以创建一个可公开访问的函数,该函数在脚本中设置该值
看起来你的对手代码缺少这一行的等效内容:
UserParty = GameObject.Find ("UserData");
假设你正在使用GameObject。实例化来创建对手,最好在那个时候设置对手,而不是使用Find(),这样你就不必担心名字的改变。