Как изменять компоненты объектов префаба?
У меня есть цикл который создаёт некое число n ,Gameobject(-тов) префаба.
Префаб объекта лидеборда состоит из:
- Image (Родительный объект)
- TMP_Text (Очки)
- TMP_Text (Комбо)
- ImageSprite (Картинка ранга)
Есть скрипт на другом объекте который создаёт эти клоны, и в скрипте лежит List<Sprite>
который содержит 6 спрайтов для того что бы использовать их в префабе при создании.
Хочу сделать так: Создаётся клон префаба, в зависимости от условий, ImageSprite
брал бы Sprite
из листа на другом объекте и засовывал в себя, так же и с TMP_Text
, все значения лежат в скрипте другого объекта в List<string>
.
Пожалуйста помогите если есть знатоки или предложите другое решение, желательно без костылей.
Ответы (1 шт):
Все что нужно было сделать это, сначала получить ссылку на объект 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];
}
}
}