С# Unity [SerializeField], Как сделать ссылку на переменную

Есть скрипт на объекте:

        [SerializeField] private float _maxHp;
        [SerializeField] private float _itemRegenHp;
if (_curHp < _maxHp)
        _regenHp = _str * 0.7f + _itemRegenHp;
        else
        _regenHp = 0;

Цель: из другого скрипта изменить переменные _maxHp и _itemRegenHp.

Я знаю, что можно реализовать ссылку через "static public" или "GetComponent<>();" Но как мне известно, эти методы не оптимизированы и при частом использовании превратят код в кашу, пожирающую память, к тому же не читаемую. В отличие от "[SerializeField] private".

Я только учу теорию, постепенно закрепляя практикой.


Ответы (1 шт):

Автор решения: Nick Shakhrai

В другом скрипте объявляешь скрипт где указаны переменные, а потом заносишь на него ссылку в Start():

private Player player;

private void Start(){
    player = FindObjectOfType<Player>();
}

А потом можешь в этом же скрипте использовать любые переменные из скрипта Player (вместо Player в строке пишешь название скрипта откуда переносишь переменные), обязательно добавляя player. к перемене из скрипта:

player._curHp++;

Не забудь в скрипте Player все эти переменные сделать публичными, если не хочешь чтобы они показывались в инспекторе, просто добавляй перед объявлением переменной [HideInInspector]

→ Ссылка