Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Вопрос по Юнити 3Д 2022. Как в скриптах избежать Find?.

BarKode Ученик (43), на голосовании 1 неделю назад
В префабе не получается заполучить скрипт, а использовать FindObjectOfType я не хочу, и из-за Find очень сильно скажется на производительности. Пж можете рассказать как избежать Find И в префабах заполучать скрипты и определённые их компоненты.

Первый скрипт: (это монета и есть в префабе)
 using System.Collections; 
using System.Collections.Generic;
using UnityEngine;

public class Coin : MonoBehaviour
{
[Range(0, 360)] public float rot;
public GameObject _cM;
[SerializeField] CoinManager _coinManager;
private void Start()
{
_cM = _coinManager.GetComponent<CoinManager>().gameObject;
}
void Update()
{
transform.Rotate(0, rot * Time.deltaTime, 0);
}

private void OnTriggerEnter(Collider other)
{
if (other.gameObject)
{
_cM.GetComponent<CoinManager>().AddOneCoinInLevel();
Destroy(gameObject);
}
}
}
Второй скрипт: (его и надо получить)
 using System.Collections; 
using System.Collections.Generic;
using TMPro;
using UnityEngine;

public class CoinManager : MonoBehaviour
{
public int numberOfCoinsInLevel;
[SerializeField] TextMeshProUGUI _textCoinInLevel;

public void AddOneCoinInLevel()
{
numberOfCoinsInLevel += 1;
_textCoinInLevel.text = numberOfCoinsInLevel.ToString();
}

}
Я пытался но не получилось. Юнити не может сохранить монету со скриптом CoinManager.
Голосование за лучший ответ
PS Мудрец (19334) 1 месяц назад
зачем тебе вообще этот коинамэнеджер в монете?
сделай синглтон из коинамэнеджера, и в монете просто вызывай CoinManager.Instance.AddOneCoinInLevel().

и не надо никакие префабы насиловать.
BarKodeУченик (43) 1 месяц назад
Спасибо огромное! Помогло!
Похожие вопросы