Granddisap, Очень мало информации. Лучше бы приложил свой код, а не эту абстрактную дичь. Если NameClass находится в компоненте, который входит в триггер, то получай у экземпляра класса это поле. В OnTriggerEnter получай компонент, в котором находится экземпляр класса NameClass и делай с ним что хочешь.
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.TryGetComponent(out SomeComponent someComponent)) // SomeComponent должен иметь в себе NameClass
{
someComponent.NameClassInstance.peremennaya...
}
}
Но напрямую изменять поля и свойства не самая лучшая
идея, объект должен сам контролировать свое состояние. Как пример:
public class Health
{
public int Current { get; private set; }
public int Max { get; private set; }
public void Restore(int value)
{
SetCurrent(Current + value);
}
public void Lose(int value)
{
SetCurrent(Current - value);
}
public void SetMax(int value)
{
Max = value;
Current = Max;
}
private void SetCurrent(int value)
{
Current = Mathf.Clamp(value, 0, Max);
}
}
Здесь ты не можешь напрямую изменить состояние извне, все взаимодействие происходит через публичные методы. Теперь неожиданного поведения не будет и не нужно будет искать по всему проекту где кто и как изменяет поле Current, чтобы найти баг. Но это не значит, что нужно для каждого поля делать геттер и сеттер.
K0TlK, привет, первый раз слышу про возможность добавить как компонент скрипт не унаследованный от MonoBehaviour, но видимо как-то можно. За идею с объектом, который контролирует сам свое состояние отдельное спасибо) Я уже и забыл.
Насчёт абстрактной дичи, это по факту все, потому как мне всего лишь нужно собрать и сохранить статистику о игроке. В OnTriggerEnter2D я как раз и планировал ее собирать, но честно не могу разобраться как создать ссылку на NameClass.
Granddisap, Ты не так понял. Компонентом скрипт, не унаследованный от MonoBehaviour не является. Ты получаешь компонент (MonoBehaviour) и в нем уже содержится экземпляр нужного тебе класса:
public class SomeComponent : MonoBehaviour
{
public SomeClass SomeClass { get; private set; }
private void Awake()
{
SomeClass = new SomeClass();
}
}
public class SomeClass
{
public int SomeProperty { get; private set; }
}
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.TryGetComponent(out SomeComponent someComponent)) // SomeComponent должен иметь в себе NameClass
{
var someProperty = someComponent.SomeClass.SomeProperty;
}
}