Как изменять компоненты объектов префаба?

У меня есть цикл который создаёт некое число n ,Gameobject(-тов) префаба.

Префаб объекта лидеборда состоит из:

  • Image (Родительный объект)
  • TMP_Text (Очки)
  • TMP_Text (Комбо)
  • ImageSprite (Картинка ранга)

Есть скрипт на другом объекте который создаёт эти клоны, и в скрипте лежит List<Sprite> который содержит 6 спрайтов для того что бы использовать их в префабе при создании.


Хочу сделать так: Создаётся клон префаба, в зависимости от условий, ImageSprite брал бы Sprite из листа на другом объекте и засовывал в себя, так же и с TMP_Text, все значения лежат в скрипте другого объекта в List<string>.


Пожалуйста помогите если есть знатоки или предложите другое решение, желательно без костылей.


Ответы (1 шт):

Автор решения: FoxyHopper Dev

Все что нужно было сделать это, сначала получить ссылку на объект ImageSprite и TMP_Text в вашем префабе. После этого вы можете установить им нужные значения из списка спрайтов и текста.

вот пример кода:

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

public class PrefabScript : MonoBehaviour
{
    public List<Sprite> spriteList; // Список спрайтов
    public List<string> textList;   // Список текстов

    private Image imageComponent;
    private TMP_Text textComponent1;
    private TMP_Text textComponent2;
    private Image imageSpriteComponent;

    private void Start()
    {
        
        imageComponent = GetComponentInChildren<Image>();
        textComponent1 = GetComponentInChildren<TMP_Text>();
        textComponent2 = GetComponentInChildren<TMP_Text>();
        imageSpriteComponent = GetComponentInChildren<ImageSprite>();


        SetSpriteAndText();
    }

    private void SetSpriteAndText()
    {

        if (spriteList.Count > 0)
        {

            int randomIndex = Random.Range(0, spriteList.Count);

            imageSpriteComponent.sprite = spriteList[randomIndex];
        }

        if (textList.Count > 0)
        {

            int randomIndex = Random.Range(0, textList.Count);

            textComponent1.text = textList[randomIndex];
            textComponent2.text = textList[randomIndex]; 
        }
    }
}
→ Ссылка