Задать вопрос
motkot
@motkot
Программирование C#.

Как тут обойтись без статичных методов?

Есть абстрактный класс Component. Его наследуют все компоненты компьютера.

В классе Component есть абстрактный метод GetInfo.
Каждый компонент реализует его. И вызывает метод ShowInfo ( включает канвас, выводит информацию на канвасе ).
Метод ShowInfo - статичный.
Значит переменные, хранящие ссылки на канвас, текст и другие штуки тоже будут статичными. Но тогда в эти переменные я не могу занести значения через инспектор. Что делать?

Класс Buy
using UnityEngine;
using TMPro;

public class Buy : MonoBehaviour
{
    [Header("Processor info")]
    [SerializeField] GameObject _processorCanvas;

    [SerializeField] TMP_Text _processorPriceText;
    [SerializeField] TMP_Text _processorCoresAmount;
    [SerializeField] TMP_Text _processorThreads;
    [SerializeField] TMP_Text _processorSocket;
    [SerializeField] TMP_Text _processorName;

    private void ShowInformation(Processor processor)
    {
        _processorName.text = processor.Name;
        _processorCoresAmount.text = processor.CoresCount;
        _processorThreads.text = processor.Threads + "GHZ";
        _processorSocket.text = processor.SocketName;
        _processorPriceText.text = processor.Price;

        _currentProcessor = processor;

        _processorCanvas.SetActive(true);
    }


Основа
using System;
using System.Collections.Generic;
					
public class Program
{
public abstract class Component
{
	protected string _name;
	public Component(string name) 
	{
		_name = name;
	}
	
	public string Name {get { return _name; } }
	
	public abstract string GetInfo();
}

public class CPU : Component
{
	private string _freq;
	private string _cores;
	
	public CPU(string name, string freq, string cores) : base(name)
	{
		_freq = freq;
		_cores = cores;
	}
	
	public override string GetInfo() 
	{ 
		Buy.ShowInfo(this) // Одна из перегрузок.
	}
}
  • Вопрос задан
  • 63 просмотра
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 2
@Spartanec33
ничего не понятно. Но если так уж хочется через статические поля и методы, то можно сделать MB класс для инспектора, из которого класс со статическими штуками будет брать значение.
Ответ написан
@NoNameDeveloper
Unity Developer
MVC
(Model) Component и его наследники. Используешь ТОЛЬКО для данных (ex: имя, цена, спрайт)
(View) У тебя должен быть префаб (ComponentView (как пример)) который принимает Model (Component) и заполнять текста и картинки с текстом и спрайтами из Model.
(Controller) Через него ты должен заполнять Views с Models.

Простой пример:
public class ComponentModel
{
    public string Name;
}

public class ComponentView
{
    private Text _nameTxt;

    public void Set(ComponentModel model)
    {
        _nameTxt.text = model.Name;
    }
}

public class ComponentController
{
    private List<ComponentModel> _components;
    public Transform Parent;
    public ComponentView ComponentPrefab;

    // Methods

    public void Awake()
    {
        Fill();
    }

    public void Fill()
    {
        for(int i = 0; i < _components.Count; i++)
        {
            ComponentView view = Instantiate(ComponentPrefab, parent);
            view.Set(_components[i]);
        }
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы