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,但没有发现任何东西。它是空的。

提前感谢!

Unity3D-无法获取其他游戏对象变量的值

您需要为您试图引用的变量提供代码。另外,说"这里的代码块都不起作用"是非常模糊的。到底是什么不起作用?你没有得到什么价值?

撇开其他不谈,假设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(),这样你就不必担心名字的改变。