2016-08-14 13 views
0

私は最初に尋ねている間に私はねじ込んだので、この質問を再請求しています。だからここに行く。私はUnity3dを使ってポケモンのファンゲームに取り組んでいます。私は現在ヘルス・バーに取り組んでいます。問題は、別のゲームオブジェクトにアタッチされている変数の値が見つからないということです。ここで働いていない私のコードの一部は以下のとおりです。Unity3D-他のgameobjectの変数の値を取得できません

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にアクセスしようとしているが、何も見つからなかったされています。空っぽです。

ありがとうございます!

+0

質問を正しく行う方法を学ぶ必要があります。 ** "問題は、別のゲームオブジェクトに添付された変数の値を見つけることができないことです。" **どのような変数ですか?どのゲームオブジェクトですか?その変数はどのようなスクリプトですか? – Programmer

+0

あなたの質問にはあまりにも多くの情報があります。問題のある部分のコードのみを投稿できますか?あなたのゲームオブジェクトがどのようにセットアップされ、スクリプトが添付されているかについてのスクリーングラブも、それをクリアするのに役立ちます。 –

+0

'public Pokemon opponent; public GameObject opponentTemp; InitiateBattle opponentObject = opponentTemp.GetComponent (); print(opponentObject); opponent = opponentObject.PokemonToCatch; print(opponent.Name); TheirSlider.maxValue = opponent.Hp; TheirSlider.value =相手。CHp; ' 私は問題を抱えている部分です。 – Procinogen

答えて

0

参照しようとしている変数のコードを提供する必要があります。また、「このコードブロックはすべて動作しません」と言っているのは、実際にはあいまいです。何がうまくいきませんか?どんな価値がないのですか?

他にも、HpとCHpがあなたが参照できないものであると仮定します。私が与えることができる最高の答えは、元のスクリプトでアクセスしようとしている変数のパブリックアクセサを必要とすることです。あなたが公にスクリプト外馬力とCHPの値にアクセスしないと何があなたがスクリプト外の値を設定することができようになる

public float HP {get { return Hp;} protected set; } 
public float CHP {get { return CHp;} protected set; } 

。あなたは、HPの値を変更する必要がある場合は、スクリプト内で値を設定し、公にアクセス可能な関数を作ることができます

0

それは、この線路の等価不足している相手のコードのようになります。

UserParty = GameObject.Find ("UserData"); 

あなたを仮定し対戦相手を作成するにはGameObject.Instantiateを使用しているので、Find()を使用する代わりにその時にopponentTempを設定して、名前の変更について心配する必要はありません。

+0

'UserParty = GameObject.Find(" UserData ");は別のゲームオブジェクトで、アクセスしようとしているものとは異なる値を含んでいます。まだ運がありません。しかし、とにかくありがとう。 – Procinogen

+0

私は 'opponentTemp = GameObject.Find(" Squirtle_1 ");' –

+0

のようなものです。すべてのポケモンのデータは、私がアクセスできない 'PokemonToCatch'変数に格納されています。 – Procinogen

関連する問題