Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+2

Ошибка error CS0029: Cannot implicitly convert type 'UnityEngine.Sprite[]' to 'UnityEngine.Sprite'

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
 using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Random = System.Random;
using UnityEngine.UI;



public class Flags : MonoBehaviour
{

    public string[,] flags = { { "Россия", "Img_05_0001" }, { "Германия", "Img_05_0002" }, { "Япония", "Img_05_0003" }, { "Китай", "Img_05_0004" }, { "Франция", "Img_05_0005" }, {"США", "Img_05_0006" }, {"Италия", "Img_05_0007"}, {"Великобритания", "Img_05_0008"}, };
        

    public string Country1;
    public string Country2;
    public string Country3;
    public string Country4;

    public Text ScoreDisplay1;
    public Text ScoreDisplay2;
    public Text ScoreDisplay3;
    public Text ScoreDisplay4;

    public int CountryFound1;
    public int CountryFound2;
    public int CountryFound3;
    public int CountryFound4;

    public int trueNumber;
    public string trueFlag;
    public string trueFlagName;
    public string ButtonName;
    public int Score;
    public int Mistake = 5;

    public SpriteRenderer spriteRenderer;

    void Start()
    {
        Game();
    }

    void Update()
    {
        ScoreDisplay1.text = Country1;
        ScoreDisplay2.text = Country2;
        ScoreDisplay3.text = Country3;
        ScoreDisplay4.text = Country4;
    }
    void Game()
    {
        CountryFound1 = new Random().Next(0, 5);
        CountryFound2 = new Random().Next(0, 5);
        CountryFound3 = new Random().Next(0, 5);
        CountryFound4 = new Random().Next(0, 5);

        Country1 = flags[CountryFound1, 0];
        Country2 = flags[CountryFound2, 0];
        Country3 = flags[CountryFound3, 0];
        Country4 = flags[CountryFound4, 0];

        trueNumber = new Random().Next(1, 4);

        if ( trueNumber == 1)
        {
            trueFlag = flags[CountryFound1, 1];
            trueFlagName = Country1;
        }
        else if ( trueNumber == 2)
        {
            trueFlag = flags[CountryFound2, 1];
            trueFlagName = Country2;
        }
        else if ( trueNumber == 3)
        {
            trueFlag = flags[CountryFound3, 1];
            trueFlagName = Country3;
        }
        else if ( trueNumber == 4)
        {
            trueFlag = flags[CountryFound4, 1];
            trueFlagName = Country4;
        }

        spriteRenderer.sprite = Resources.LoadAll<Sprite>(trueFlag);

        
        }
        public void click1()
        {
            ButtonName = Country1;
        }
        public void click2()
        {
            ButtonName = Country2;
        }
        public void click3()
        {
            ButtonName = Country3;
        }
        public void click4()
        {
            ButtonName = Country4;
        }
        public void Click()
        {
            if(trueFlagName == ButtonName)
            {
                Game();
                Score += 1;
            }
            else
            {
                Game();
                Mistake -= 1;
            }
    }
        
} 
По дате
По рейтингу
Аватар пользователя
Искусственный Интеллект

Похоже, проблема тут:

1
 spriteRenderer.sprite = Resources.LoadAll<Sprite>(trueFlag); 

LoadAll означает "загрузить все". Его название подразумевает, что результат метода может содержать несколько ресурсов (массив, в вашем случае - массив спрайтов).

А поле spriteRenderer.sprite может содержать только один спрайт.

Если вам нужен первый загруженный спрайт, тогда возьмите из массива нулевой элемент:

1
 spriteRenderer.sprite = Resources.LoadAll<Sprite>(trueFlag)[0];