【问题标题】:A SpriteRenderer is not displaying the sprite when set the second timeSpriteRenderer 在第二次设置时不显示精灵
【发布时间】:2021-02-14 15:32:20
【问题描述】:

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

在这里,我创建了两个 Cell 实例,并使用来自 mIconManager 的 sprite 为 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);
    }
}

这是来自 CellController 脚本的 sn-p 附加到 Cell

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 预制件:

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

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

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




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

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

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

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

编辑:

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

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

【问题讨论】:

    标签: unity3d sprite


    【解决方案1】:

    尝试用相同的精灵填充它两次,代码似乎很正常 这将帮助我更多地调试它。

    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);
        }
    }
    

    【讨论】:

    • 我做到了,但仍然没有成功。无法在 cmets 部分发布图片,我将在稍后更新问题。
    • 我更新了问题。给了他们两个苹果雪碧。第二个还是空的
    【解决方案2】:

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

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

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

    相反,我使用了tranform.Find,一切正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-04
      • 2020-12-31
      • 2013-02-27
      • 1970-01-01
      相关资源
      最近更新 更多