【问题标题】:Sprite disappearing to the back of another sprite on moving to defined point via transform.position通过 transform.position 移动到定义的点时,精灵消失到另一个精灵的后面
【发布时间】:2015-08-12 15:58:32
【问题描述】:

Unity2D 的 Sprite 渲染有问题。

目前我有一个用于游戏板的精灵,一个持有 spawnPoint 的空游戏对象,一个标记它的随机精灵,以及一个作为预制件实例化的 playerSprite。如果我只是在 Unity 上使用层次结构,playerSprite 会完美地显示在 gameBoard 上方,并且“硬编码”其位置将始终保持在 gameBoard sprite 上方,肉眼可见。

当我想实例化 gameBoard 并将 playerPrefabs 动态添加到游戏中时,问题就来了。

这是我目前正在使用的当前代码sn-p:

gameBoard.SetActive(true); //gameBoard is defined as a public gameObject with its element defined in Unity as the gameBoard sprite. 
Player.playerSprite = (GameObject)Instantiate(Resources.Load("playerSprite"));
Player.playerSprite.transform.localPosition = spawnPoint.transform.localPosition;

结果是 spritePrefab 在我想要的完美位置生成,但在 gameBoard sprite 后面,使其在游戏运行时隐藏。

使用transform.position代替transform.localPosition的结果是一样的

我应该如何编码转换部分。这样我仍然可以让我的 playerSprite 可见?谢谢。

【问题讨论】:

  • 请务必使用Unity3d标签; Unity 标签用于 Unity 依赖注入框架。
  • 注意到了。附加信息:除了精灵本身之外,没有一个精灵包含任何其他组件。

标签: unity3d


【解决方案1】:

这很可能不是位置问题,而是您的 Sprite 渲染器的 Sorting Order

任何 SpriteRenderer 的默认值为 Layer = Default & Sorting Order = 0

具有较高排序顺序的 Sprite Renderer 将呈现在具有较低值的那些之上。

将以下行添加到代码末尾,然后尝试一下。

gameBoard.GetComponent<SpriteRenderer>().sortingOrder = 0;
Player.playerSprite.GetComponent<SpriteRenderer>().sortingOrder = 0;

显然,您也可以在检查器中执行相同的操作。

【讨论】:

  • 我已经设法让它工作了!虽然gameBoard 的sortingOrder 代码不是必需的,但我意识到playerSprite 的sortingOrder 是-1。将精灵动态设置为 1 就可以了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
相关资源
最近更新 更多