Как получить доступ к UISpite?

94
22 апреля 2021, 15:50

Есть код, который создаёт объекты с компонентом Image, в котором я хочу заменить Source Image на один из дефолтных, через код.

Пример:

Код:

using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine;
public class PotionManager : MonoBehaviour {
    Image sourceImage;
    private float timer=25;
    static int COUNT_OF_ORDERS = 0;
    public Transform parent;
    public List<PotionAsset> potionList = new List<PotionAsset>();
    private float posX,posY,posZ;
    // Use this for initialization
    void Start () {
    }
    // Update is called once per frame
    void Update()
    {
        timer += Time.deltaTime;
        if (timer >= 30)
        {
            CreateOrderHolder();
        }
    }
    void CreateOrderHolder()
    {
        posX = 160 * COUNT_OF_ORDERS + 80;
        posY = -70;
        posZ = 0;
        COUNT_OF_ORDERS++;
        GameObject temp = new GameObject("Potion Order " + COUNT_OF_ORDERS, typeof(RectTransform));
        temp.transform.SetParent(parent);
        temp.transform.localPosition = new Vector3(posX, posY, posZ);
        temp.transform.localScale = new Vector3(1.5f, 1.5f, 1.5f);
        temp.GetComponent<RectTransform>().anchorMax = new Vector2(0, 1);
        temp.GetComponent<RectTransform>().anchorMin = new Vector2(0, 1);
        CreatePotionHolder(temp.transform);
        timer = 0;
    }
    void CreatePotionHolder(Transform parent)
    {
        posX = 0;
        posY = 13.5f;
        posZ = 0;
        GameObject temp = new GameObject("PotionHolder", typeof(RectTransform), typeof(Image));
        temp.transform.SetParent(parent);
        temp.transform.localPosition = new Vector3(posX, posY, posZ);
        temp.transform.localScale = new Vector3(1, 1, 1);
        temp.GetComponent<RectTransform>().sizeDelta = new Vector2(100,50);
        sourceImage = temp.GetComponent<Image>();
        sourceImage.sprite = Resources.Load<Sprite>("Resources/unity_builtin_extra/UISprite");
        Debug.Log(sourceImage.sprite);
    }
}

Итого sourceImage.sprite возвращает null. Пробовал добавлять в конце формат файла png,psd. Не помогло.

Answer 1

Ответ на этот вопрос дан на ресурсе GameDevelopment

Приблизительный перевод:

Вы можете получить доступ к встроенным дополнительным ресурсам в редакторе. Я полагаю, что если вы сделаете ссылку на спрайт пользовательского интерфейса публичной, это создаст копию для использования в ходе выполнения программы.

В ином случае, путь к спрайту 'UI/Skin/UISprite.psd'

Пример:

sourceImage = temp.GetComponent<Image>();
sourceImage.sprite = UnityEditor.AssetDatabase.GetBuiltinExtraResource<Sprite>("UI/Skin/UISprite.psd");

Я бы предложил использовать Sprite.Create (); во время выполнения программы, и вы можете создать текстуру для нее, так что вам не нужно загружать их по умолчанию.

READ ALSO
Разрешение зависимостей Autofac

Разрешение зависимостей Autofac

Создал текстовый проект консольныйПодтянул autofac

80
битовая маска mysql

битовая маска mysql

подскажите у меня есть таблица в ней числа, мне надо перенести с этой таблицы в другую 2 значения с битовой маской? непонимаю я в них? с примера...

101
Ошибка в синтаксисе Operand should contain 1 column(s)

Ошибка в синтаксисе Operand should contain 1 column(s)

Всем привет, работаю с cs cart и имею такой запрос

117
Не могу создать внешний ключ в бд

Не могу создать внешний ключ в бд

Помогите, пожалуйста)Вроде нет проблем, поля одинаковые, но не хочет связыватьПоследовательность правильная

117