@Romanuss

Не работает связь между скриптами. Что делать?

Здравствуйте, имеется проблема. Не работает связь между скриптами в Unity.
Скрипт подбора предметов.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MoveItems : MonoBehaviour {

    public AudioClip CoinSound;
    public int coin;
    public GameObject ps;

    void OnTriggerEnter2D(Collider2D other)
    {
        if (other.tag == "Star")
        {
            coin = coin + 1;

            AudioSource.PlayClipAtPoint(CoinSound, transform.position);

            Instantiate(ps, transform.position, Quaternion.identity);
            Destroy(other.gameObject);
            Invoke("deletePs", 0.3f);
        }
    }

    void deletePs() { Destroy(FindObjectOfType<GameObject>()); }
}


Скрипт выводящий число монет на экран

using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine;

public class CoinUi : MonoBehaviour {

    public Text coinText;
    public int coinValue;
    public GameObject player;

	void Start ()
    {
        coinValue = player.GetComponent<MoveItems>().coin; //здесь не работает
    }
	
	void Update ()
    {
        Debug.Log(coinValue);
        coinText.text = coinValue.ToString();
    }
}
  • Вопрос задан
  • 144 просмотра
Решения вопроса 1
BasmanovDaniil
@BasmanovDaniil
Геймдизайнер-телепат
Связь между скриптами работает замечательно, вы не понимаете разницу между ссылочными и знаковыми типами. MoveItems.coin имеет тип int, который не является ссылочным типом, а это значит, что в старте вы копируете текущее значение из MoveItems в CoinUi, и это значение потом просто лежит в переменной и не меняется. Если вы хотите получить текущее значение, то вы можете, например, сохранить ссылку на MoveItems и обращаться к coin через неё. Но, вообще говоря, превращать число в строку в Update это не очень хорошая идея, поскольку ToString выделяет память при конверсии, и со временем вы можете либо загадить всю память и уронить приложение, либо нарваться на фризы во время работы сборщика мусора. Лучше использовать события или что-нибудь ещё.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@slayez
coinText.text = player.GetComponent<MoveItems>().coin.ToString();
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы