2016-08-14 2 views
0

처음 질문하는 동안 실수로이 질문을 다시하고 있습니다. 그래서 여기에 우리가 간다. 나는 Unity3d를 사용하여 Pokémon fangame에서 일하고 있습니다. 현재 건강 바에 종사하고 있습니다. 문제는 별도의 게임 객체에 첨부 된 변수의 값을 찾을 수 없다는 것입니다. 여기에 작동하지 않는 내 코드의 일부는 다음과 같습니다Unity3D- 다른 게임 객체 변수의 값을 얻을 수 없습니다.

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; 

(참고 :.. 마력과 CHP 나는 당신이에 대한 정보가 필요하면 내가 당신에게 몇 가지 문서를주지 만든 클래스의 부분이다)

내가 액세스하려는 대상은 opponentObject.PokemonToCatch입니다. 나는 그것을 참조하려고 할 때 아무것도 얻지 못한다. 다른 게임 개체의 스크립트 (이 질문의 제목)에서이를 참조하려고합니다. 그래도 내 스크립트의이 부분에서 작동하는 것 같습니다.

UserParty = GameObject.Find ("UserData"); 
    Party holdingPokemon = UserParty.GetComponent<Party>(); 

    MySlider.maxValue = holdingPokemon.currentPokemon [0].Hp; 
    MySlider.value = holdingPokemon.currentPokemon [0].CHp; 

나에게도 마찬가지입니다. 이쪽을 제외하고, 이것은 내가 찾을 수있는 모든 것입니다.

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에 액세스하기 위해 노력하고있어,이를 요약하면, 아무것도 찾을 수 없습니다되고있다 : 당신이 PokemonToCatch 변수에 대한 코드를 원하는 경우 , 여기 있습니다. 그것은 비어 있습니다.

미리 감사드립니다.

+0

질문을 올바르게하는 법을 배워야합니다. ** "문제는 개별 게임 개체에 연결된 변수의 값을 찾을 수 없다는 것입니다."** 어떤 변수가 있습니까? 어떤 게임 개체입니까? 그 변수는 내부의 어떤 스크립트입니까? – Programmer

+0

귀하의 질문에 약간의 정보가 있습니다. 문제가있는 코드 부분 만 게시 할 수 있습니까? 또한 GameObjects가 설치되고 스크립트가 첨부 된 방법에 대한 일부 screengrab은이를 지우는 데 도움이 될 수 있습니다 –

+0

'public Pokemon opponent; 공개 GameObject opponentTemp; InitiateBattle opponentObject = opponentTemp.GetComponent (); 인쇄 (opponentObject); 상대 = opponentObject.PokemonToCatch; 인쇄물 (상대방 이름); TheirSlider.maxValue = 상대방 .Hp; TheirSlider.value = 상대.CHp;' 내가 구체적으로 문제가되는 부분입니다. – Procinogen

답변

0

참조하려는 변수에 대한 코드를 제공해야합니다. 또한 "이 코드 블록은 모두 작동하지 않습니다"라는 말은 정말 모호합니다. 정확히 작동하지 않는 것은 무엇입니까? 어떤 가치가 있지 않습니까?

다른 모든 것은 제쳐두고, Hp와 CHp는 당신이 참조 할 수없는 것이라고 가정합니다. 가장 좋은 대답은 원래 스크립트에서 액세스하려는 변수에 대한 공용 접근자가 필요하다는 것입니다.

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

이렇게하면 스크립트 외부에서 hp 및 CHp 값에 공개적으로 액세스 할 수 있으며 스크립트 외부에서 값을 설정할 수 없습니다. 당신이 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

관련 문제