Unitate: Nu se poate accesa variabila unui script C# dintr-un alt obiect (Dezvoltarea jocurilor, Unitate, C#)

user62039 a intrebat.
a intrebat.

Am găsit deja întrebări similare pe stackexchange.com legate de accesarea variabilelor dintr-un alt obiect. Dar întrebarea mea pare să aibă un context ușor diferit și răspunsurile din acele întrebări nu funcționează.

Am următoarea scenă (dezbrăcată) care cuprinde personajul standard FPS:

Scene001
  |
  |--FPSController
       |
       |--FirstPersonCharacter

Ierarhia mea (dezbrăcată) Assets hierarchy este următoarea (folderele sunt închise cu <> paranteze):

<Assets>
  |
  |--<Scripts>
  |     |
  |     |--Actions.cs
  |
  |--<Standard Assets>
        |
        |--<Characters>
              |
              |--<FirstPersonCharacter>
                   |
                   |--<Scripts>
                         |
                         |--FirstPersonController.cs

Acum FirstPersonController.cs este atașat la FPSController în mod implicit și Actions.cs este atașat de mine la FirstPersonCharacter.

Extras din FirstPersonController.cs este după cum urmează:

...
namespace UnityStandardAssets.Characters.FirstPerson
{    
     ...
     public class FirstPersonController : MonoBehaviour
     {
          ...
          private void GetCharacter()
          {    
               GameObject _obj = GameObject.Find("FirstPersonCharacter");// ok here
               bool is_acted = _obj.GetComponent<Actions>().is_acted; // error here, please see below
          }
          ...
     }
}

Extras din Actions.cs este după cum urmează:

public class Actions: MonoBehaviour {
    ...
    public static bool is_acted;
    ...
}

Tot ce vreau este să accesez bool is_acted la variabila Actions.cs din FirstPersonController.cs.

Eroarea este următoarea:

Assets/Standard Assets/Characters/FirstPersonCharacter/Scripts/ 
FirstPersonController.cs(63,38):error CS0246: The type or namespace
name `Actions' could not be found. Are you missing an assembly reference?

Mie mi se pare că este o problemă de namespace sau de locație a folderului!!!?

Orice ajutor este foarte apreciat. Mulțumiri în avans.

Actualizat mai sus

  • Modificat Acțiune în Acțiuni.
  • Corectare greșeală de scriere ().

Exemplu de proiect:

https://ufile.io/knmxj

Comentarii

  • Unde este localizat fișierul Action.cs?-  > Por Sidar.
  • @Sidar Da. Action.cs este atașat ca o componentă la FirstPersonCharacter și funcționează din acel Action clasă se execută corect. De asemenea, există doar un singur FirstPersonCharacter obiect, adică sub FPSController obiect. Scuzați-mă, s-ar putea să nu vă fi înțeles bine.-  > Por utilizator62039.
  • @Draco18s Îmi pare rău! A fost o greșeală de scriere și am schimbat și numele Action.cs în Actions.cs, altfel se ia System.Action obiect. Am actualizat întrebarea mea. Vă rog să așteptați! Am de gând să încarc proiectul meu de probă pentru a fi mai clar.-  > Por utilizator62039.
  • @Draco18s Bună ziua! Am încărcat proiectul. Sunteți disponibil să îl vedeți?-  > Por user62039.
1 răspunsuri
Draco18s nu mai are încredere în SE

Acest lucru este cauzat de Unity

Dar este ușor de rezolvat.

Standard Assets folderul este compilat înainte de tuturor celorlalte scripturi (aceasta poate fi o rămășiță de pe vremea când Unity susținea oficial fișierele JavaScript / UnityScript, care trebuiau compilate la un moment diferit de fișierele C#, astfel încât Standard Assets erau compilate înaintea tuturor celorlalte, pentru ca atât scripturile create de utilizatori C# cât și JS să poată face referire la el).

Tot ce trebuie să faceți pentru a remedia acest lucru este să schimbați numele folderului Standard Assets în orice altceva (cu excepția unui alt nume de cuvânt cheie magic, cum ar fi Resources).

De asemenea, aveți o altă eroare în cod:

public static bool is_acted;
...
GetComponent<Actions>().is_acted;

Câmpul dvs. este static și nu poate fi accesat prin intermediul unui obiect de instanță. Fie ar trebui să faceți Actions.is_acted fie să eliminați modificatorul static.

Comentarii

  • Minunat! Acum se compilează! Mulțumesc mult pentru răspunsul rapid!-  > Por user62039.
  • @user62039 Mă bucur că am reușit să lucrez pentru tine. A fost ceva cu care a trebuit să mă joc odată ce am avut proiectul tău, deoarece este o caracteristică bizară care nu este documentată bine/ deloc.-  > Por Draco18s nu mai are încredere în SE.

Tags:,