Переменная-ссылка и указатели как с ними работать в Unity?

272
12 октября 2017, 09:08

Как получить указатель (или переменную-ссылку) на переменную Color в компоненте Image? что бы не обращаться постоянно к разным компонентам и не давать им разные цвета. Или это не возможно?

public class DrumManager : MonoBehaviour {
    Transform obj;
    DrumElement dr;
    void Start()
    {
        //тут более менее работает
        dr = new DrumElement(obj.GetComponent<Image>().color);
        dr.Test();
        dr.Test();
        //выводит то что "задумано", только по моему исходный цвет не меняет
    }
    void Update()
    {
        //но вот когда доходит до этого момента, значение переменой  обнуляется (т.е. rgba(0,0,0,0))
        dr.Test();
    }
}
unsafe class DrumElement
{
    public Color* col;
    public DrumElement(Color _col)
    {
        time = 0;
        transparence = 0;
        col = &_col;
        print("cool" + *col);
        print("cool111 " + *col);
        Test();
    }
    public void Test()
    {
        (*col).r -= 0.1f;
            print((*col).r);
    }        
}
Answer 1

Сам по себе тип Color в Unity - это структура, об этом написано в официальной документации, а структуры в C# являются value type (или значимыми типами), а не ссылочными, в отличии от классов. Для ваших нужд самым логичным решением будет получить ссылку на комопнент Image(который как раз-таки ссылочный тип, потому что является классом), и закэшировать ее, а для изменения вам нужно будет обращаться к вашей ссылке на Image и менять значние ее свойства Color.

В целом, кэширование компонентов в Unity это практически обязательная практика, так как методы по типу GetComponent<T>() довольно дорогостоящие и нужно стараться минимизировать их использование в своем проекте.

READ ALSO
Ошибка при чтении данных из БД Mysql c#

Ошибка при чтении данных из БД Mysql c#

При чтении данных из таблицы (100+ столбцов) выдаёт ошибкуОднако если обратить к другой таблице или уменьшить количество столбцов до 25 всё...

205
Методы оптимизации Reactive Extensions

Методы оптимизации Reactive Extensions

По мотивам своего вопроса Синхронизация Model и ViewModel, когда приложение - Client

148
Добавление элементов в список

Добавление элементов в список

Добрый день! Хочу добавить по клику элемент li с данными а к нему кнопку после элемента (есть вторая часть задания, чтобы по клику удалить этот...

256
Как выгрузить данные из JSON в Гугл Таблицу

Как выгрузить данные из JSON в Гугл Таблицу

Имеется информация в JSON формате получаемая с https://bittrexcom/api/v1

374