Лучшая практика для доступа к компонентам с использованием скриптов в Unity? - PullRequest
0 голосов
/ 21 апреля 2020

Я новичок в Unity, так что go легко для меня. :)

Я добавил игровой объект с компонентом текстового поля (через TextMeshProUGUI) на экран в моей голове. Я хочу использовать это для отображения различной статистики для отладки во время игры.

Затем я создал скрипт, который я добавил как компонент к тому же игровому объекту, который содержит мой текстовый компонент. Это лучшая практика? Не уверен, как еще я мог бы заставить сценарий выполняться.

После того, как я создал свой сценарий, мне нужно было найти текстовый компонент, а также некоторые другие компоненты в моей сцене, чтобы я мог отобразить отладочную информацию. Ниже вы можете увидеть, как я это сделал ... немного грязно искать всю сцену, чтобы найти эти вещи. Хотелось бы узнать, как долго программисты Unity go об этом!

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

public class PlayerDebugStatistics:MonoBehaviour {
    TextMeshProUGUI playerDebugStatisticsText;
    PlayerCharacterController playerCharacterController;
    Health playerHealth;

    private void Start() {
        // First find the object in the scene named "PlayerDebugStatisticsText" and then get it's TextMeshProUGUI component
        this.playerDebugStatisticsText = GameObject.Find("PlayerDebugStatisticsText").GetComponent<TextMeshProUGUI>();

        // Get the player character controller
        this.playerCharacterController = GameObject.FindObjectOfType<PlayerCharacterController>();

        // Get the player health from the player character controller
        this.playerHealth = playerCharacterController.GetComponent<Health>();
    }

    void Update() {
        // Update the text every frame
        this.playerDebugStatisticsText.SetText(string.Format("{0:N2}", this.playerHealth.currentHealth));
    }
}

1 Ответ

1 голос
/ 22 апреля 2020

3 способа

  1. Создайте ссылку инспектора на другой объект и получите к нему доступ из своего скрипта - публичного c или частного (с помощью Атрибут [SerializeField]) в вашем скрипте - и перетащите компонент как в этом видео: https://youtu.be/dMgQOP7kdxg?t=425
  2. Используйте шаблон синглтона: https://www.youtube.com/watch?v=5p2JlI7PV1w
  3. Используйте инъекцию зависимостей - https://github.com/modesttree/Zenject

Ваш путь не страшен, если вы этого не сделаете это в Update () l oop, и кешировать ваши объекты (как, кажется, вы делаете), но если вам нужна такая производительность в Start (), вышеупомянутые опции могут помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...