С# 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 шт):
В другом скрипте объявляешь скрипт где указаны переменные, а потом заносишь на него ссылку в Start():
private Player player;
private void Start(){
player = FindObjectOfType<Player>();
}
А потом можешь в этом же скрипте использовать любые переменные из скрипта Player (вместо Player в строке пишешь название скрипта откуда переносишь переменные), обязательно добавляя player. к перемене из скрипта:
player._curHp++;
Не забудь в скрипте Player все эти переменные сделать публичными, если не хочешь чтобы они показывались в инспекторе, просто добавляй перед объявлением переменной [HideInInspector]