UNITY3D применяет стиль спрайта в массиве к спрайту /////// ошибка CS1061: «Sprite» не содержит определения «sprite» - PullRequest
0 голосов
/ 30 сентября 2019

Здравствуйте, спасибо за чтение. Я следую учебнику 2048 года, и он использует текст / цвет для своих плиток. Я использую изображение.

При применении различных стилей к плиткам его код выглядит следующим образом:

TileText.text = TileStyleHolder.Instance.TileStyles [index].Number;
TileText.color = TileStyleHolder.Instance.TileStyles[index].TextColor;
TileImage.color = TileStyleHolder.Instance.TileStyles [index].Tilecolor;

Код моего держателя стиля следующий:

 [System.Serializable]
 public class TileStyle 

{
public Sprite tile_number;

}

public class TileStyleHolder : MonoBehaviour
{
//SINGLETON
public static TileStyleHolder Instance;

public TileStyle[] TileStyles;

void Awake() 
{
    Instance = this;
}
}

мой код тайла выглядит следующим образом:

public class Tile : MonoBehaviour
{
public bool mergedThisTurn = false;

public int indRow;
public int indCol;

public int Number 
{
    get 
    {
        return number;
    }
    set 
    {
        number = value;
        if (number == 0)
            SetEmpty();
        else 
        {
            ApplyStyle(number);
            SetVisible();
        }
    }
}
//private SpriteRenderer spriteRenderer;

private Sprite tile_number;

private int number;


void Awake() 
{
    Sprite tile_number = GetComponentInChildren<Image>.sprite ();        
}

void ApplyStyleFromHolder(int index) 
{
    tile_number.image = TileStyleHolder.Instance.TileStyles[index].tile_number;
}

И выдает ошибку:

  'Sprite' does not contain a definition for 'image' and no accessible extension method 

Однако, если я использую эту строку кода:

    tile_number = TileStyleHolder.Instance.TileStyles[index].tile_number;

Тогда он не выдаст ошибку, но также не изменит стиль плитки с 2 на 4 после объединения. Он остается как 2 и не выдает ошибку.

Пожалуйста, помогите, теперь я знаю, как преобразовать изображение в следующее изображение в массиве.

1 Ответ

0 голосов
/ 30 сентября 2019

tile_number - указатель на Sprite.

Sprite не содержит члена с именем sprite, поэтому вы получаете эту ошибку.

Теперькогда вы делаете tile_number = something;, вы просто меняете указатель (то есть tile_number), чтобы он указывал на что-то другое, то, на что он указывал раньше, не меняется.

Если вы посмотрите на Sprite API , вы увидите, что у него есть член с именем texture. Это парень, которого вы хотите изменить.

Итак, для ясности, когда вы делаете tile_number.texture = foo.bar.some_texture, tile_number - указатель, указывающий на объект Sprite, у этого объекта есть член с именем texture, и выизменив его на foo.bar.some_texture. Это очень отличается от указания указателю tile_number указать на какой-то другой спрайт.

Я предполагаю, что тип tile_number равен Sprite, что, как кажется, указывает ваш код.

...