C# UNITY3D将数组中精灵的样式应用于精灵[CS1061:'];雪碧&x27;不包含';雪碧&x27;

C# UNITY3D将数组中精灵的样式应用于精灵[CS1061:'];雪碧&x27;不包含';雪碧&x27;,c#,unity3d,game-development,C#,Unity3d,Game Development,你好,谢谢你的阅读。 我正在学习2048教程,他正在为他的瓷砖使用文本/颜色。我使用的是图像 将不同样式应用于瓷砖时,他的代码如下所示: TileText.text = TileStyleHolder.Instance.TileStyles [index].Number; TileText.color = TileStyleHolder.Instance.TileStyles[index].TextColor; TileImage.color = TileStyleHolder.Instance

你好,谢谢你的阅读。 我正在学习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;
}
我的磁贴代码如下:

 [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;
}
但是,如果我使用这行代码:

    tile_number = TileStyleHolder.Instance.TileStyles[index].tile_number;
然后,它不会抛出错误,但合并后也不会将平铺样式从2更改为4。它保持为2,不会抛出错误


请帮助,我现在知道如何将图像转换为阵列中的下一个图像。

tile\u number
是指向
精灵的指针

Sprite
不包含名为
Sprite
的成员,因此会出现该错误

现在当你做
tile\u number=something,您只是将指针(即
平铺编号
)更改为指向其他对象,它之前指向的对象不会更改

如果查看,您将看到它有一个名为
纹理的成员。那就是你想改变的人

因此,要明确的是,当你做
tile\u number.texture=foo.bar.some\u texture
tile\u number
是一个指向精灵对象的指针,这个对象有一个名为
texture
的成员,你正在将其更改为
foo.bar.some\u texture
。这与告诉你的
tile\u编号
指针指向其他精灵非常不同


我假设
tile\u number
的类型是
Sprite
,这似乎是您的代码所指示的。

嗨,我不得不多次更改脚本,以模仿unity中的脚本。请再看上面,我第一次搞砸了,很抱歉,谢谢你的回答。我在回答中说的话仍然适用。但是您犯了一个语法错误,它应该是
getComponentChildren().sprite。另外,您要声明两次
tile\u number
,一个在类中,一个在Awake中(您必须删除Awake中的
Sprite
单词)。