第二次设置时,SpriteRenderer 不显示精灵

问题描述

我有一个单元预制件,其中有一个带有 SpriteRenderer 的 GameObject。我正在实例化一个预制件的多个实例并为每个实例提供一个精灵。第一个单元格实例显示给定的精灵,但第二个不显示

这里我创建了 Cell 的两个实例,并用来自 mIconManager 的精灵为 Cell 提供:

private void PopulateCells()
{
    for (var i = 0; i < 2; i++)
    {
        GameObject goPrefab = Instantiate(goRawPrefab,CalculateCellPosition(i),Quaternion.identity,trBoard);
        CellController cellController = goPrefab.GetComponent<CellController>();
        cellController.FillContent(mIconManager.getSprite(i),i);
    }
}

这是附加到 CellControllerCell 脚本的片段:

private void Awake()
{
    mIcon = GameObject.Find("Iconsprite").GetComponent<SpriteRenderer>();
    mCardBg = GameObject.Find("CardBg").GetComponent<SpriteRenderer>();
}

public void FillContent(Sprite sprite,int index)
{
    mSprite = sprite;
    mIcon.sprite = mSprite;
}

这是我的 Cell 预制件:

enter image description here

当我运行代码时,预制件的第二个实例没有获得精灵。

enter image description here

我在游戏运行时在检查器中检查了第一个预制件的 SpriteRenderer,它说 anchovies 表示精灵 - 我通过 FillContent() 方法给出的精灵。有趣的是,第二个预制件的 SpriteRenderer 组件显示EMPTY 精灵。

游戏运行时第一个 Prefab 的 SpriteRenderer:

First Prefab's SpriteRenderer while game is running




游戏运行时的第二个 Prefab 的 SpriteRenderer:

Second Prefab's SpriteRenderer while game is running

我错过了什么吗?我在互联网上搜索,发现一些帖子说“SpriteRenderer 没有第二次加载精灵”,但他们没有回答,回答的那些也没有解决我的问题。

附言我还尝试为 Cell 预制件的两个实例设置相同的精灵 - 仍然没有成功。

P.S.2。我记录了提供给 Cell 预制件的两个实例的精灵,它们不为 null 或为空。我什至做了 Debug.Log(mIcon.sprite) 这两个实例都记录了我提供的精灵的名称

编辑:

为两个实例提供相同的精灵时记录:

    public void FillContent(Sprite sprite,int index)
    {
        Debug.Log("hop,spriteName : " + sprite + ",prefabIndex : " + index);
        mSprite = sprite;
        mIcon.sprite = sprite;
    }

enter image description here

解决方法

尝试用相同的精灵填充它两次代码看起来很正常 这将帮助我调试这一切,例如。

private void PopulateCells()
{
    for (var i = 0; i < 2; i++)
    {
        GameObject goPrefab = Instantiate(goRawPrefab,CalculateCellPosition(i),Quaternion.identity,trBoard);
        CellController cellController = goPrefab.GetComponent<CellController>();
        cellController.FillContent(mIconManager.getSprite(1),i);
    }
}
,

好的,事实证明问题与 SpriteRenderer 无关。 SpriteRenderer 按预期工作。但是,我获得对 SpriteRenderer 的引用的方式不正确。

CellController 中,我通过 GameObject.Find... 获得了对 SpriteRenderer 的引用,问题是它没有给我一个实例化的预制克隆的引用,而是第一个预制克隆的引用。

>
private void Awake()
{
    mIcon = GameObject.Find("IconSprite").GetComponent<SpriteRenderer>();
    mCardBg = GameObject.Find("CardBg").GetComponent<SpriteRenderer>();
}

相反,我使用了 tranform.Find,一切都按预期工作。