Unity3D c# Komunikacja między klasami

0

Witam czy mógłby mi ktoś wytłumaczyć jak w skrypcie powiedzmy B mogć odnieść się do zmiennej np. Health która jest w skrypcie A?
znalazłem w internecie ze do zmiennych w skryptach które są w standard assets mogę się łatwo odwoływać wpisując
public UnityStandardAssets.Characters.FirstPerson.FirstPersonController Fpsc;
ale jak odwołać się do zmiennej w skrypcie który sam sobie napisałem i jest on w folderze _Skrypty który jest w głównym katalogo tu już nie mogłem znaleźć.
Prosił bym o pomoc / wytłumaczenie jak sie to robi

0

W Twoim przykładzie odwołujesz się do klasy, a nie zmiennej -> deklarujesz zmienną Fpsc typu FirstPersonController.

Żebyś mógł odnieść się do zmiennej w klasie, musisz znaleźć instancję tego skryptu (obiekt, do którego przypięty jest ten skrypt).
W Unity jest multum możliwych rozwiązań tego problemu:

  1. Możesz bezpośrednio z poziomu skryptu B szukać skryptu A -> zapisy typu GetComponentInParent<A>().Health, GetComponentInChildren<A>().Health,
  2. Możesz zrobić dodatkowy skrypt C, który będzie Unity'owym singletonem (z publiczną statyczną instancją inicjowaną w metodzie Awake() oraz publicznymi polami typu A oraz B, do których w edytorze lub po instancjonowaniu prefabów podepniesz obiekty z tymi skryptami), wtedy ze skryptu B do A.Health będziesz się odwoływać C.instanceA.Health.
  3. Możesz obiektowi ze skryptem A przypisać tag i w skrypcie B wyszukiwać obiektu z tym tagiem i na znalezionym obiekcie wywołać metodę GetComponent<A>().Health. -> https://docs.unity3d.com/ScriptReference/GameObject.FindWithTag.html

Rozwiązanie jakiego użyjesz zależy od rodzaju gry, którą tworzysz. Jeśli chcesz się dobrać do życia postaci trafionej przez pocisk, to lepiej w metodzie obsługującej kolizję pocisku zrobić GetComponentInParent<A>().Health na colliderze w który uderzyliśmy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1