【问题标题】:Sorting Order Not Working Correctly排序顺序不正确
【发布时间】:2016-04-16 01:28:19
【问题描述】:

我正在尝试为 2D 游戏统一更改排序层的顺序,但以下脚本不适用于我:

using UnityEngine;
using System.Collections;

public class LevelManager : MonoBehaviour {

    public GameObject player;
    public SpriteRenderer deadGuy;

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {

        if (player.transform.position.y < deadGuy.transform.position.y)
        {
            deadGuy.sortingOrder = 0;
        } else
        {
            deadGuy.sortingOrder = 2;
        }

    }
}

在运行游戏之前,对象已在检查器窗口统一中链接。

编辑

现在这是我的代码:

using UnityEngine;
using System.Collections;

public class LevelManager : MonoBehaviour {

    public GameObject player;
    public GameObject deadGuy;
    public bool belowTheY;

    // Use this for initialization
    void Start () {

        deadGuy.GetComponent<SpriteRenderer>().sortingOrder = 2;

    }

    // Update is called once per frame
    void Update () {

        if (player.transform.localPosition.y < deadGuy.transform.localPosition.y)
        {
            belowTheY = true;
            deadGuy.GetComponent<SpriteRenderer>().sortingOrder = 0;

        } else
        {
            belowTheY = false;
            deadGuy.GetComponent<SpriteRenderer>().sortingOrder = 2;
        }

    }
}

如果用户低于 deadGuy 的 Y 位置,bekowTheY 将被激活,因此我知道 if 语句正在正确执行。但是排序层没有被改变

【问题讨论】:

  • 什么不起作用?该属性在编辑器中是否发生更改,但图像未按您想要的顺序显示?您如何评论 Update 函数中的代码,将 deadGuy.sortingOrder = 2; 放在 Update 函数中。在Editor中选择SpriteRenderer,检查sortingOrder是否改变了属性......
  • 查看 deadGuy 对象,我可以看到它根本没有改变其排序层。它只是停留在 2(在检查器窗口中设置的属性)
  • 当我说把它放在更新函数中时,我的意思是Start函数。还有一件事。删除更新中的所有代码并将deadGuy.sortingOrder = 4; 放入 Start 函数中。我想看看你的代码是否有效。告诉我编辑器中的值。
  • 我意识到 if (player.transform.position.y ().sortingOrder = 4;在 start 函数中,他确实得到了 4 的排序层。但是,如果我用 deadGuy.GetComponent().sortingOrder = 0; 更新代码中的行和 deadGuy.GetComponent().sortingOrder = 2; 分别,它仍然不起作用。如果我设置一个布尔值,我可以在 if 语句中看到触发
  • deadGuy 已经是SpriteRenderer。请解释你为什么要做deadGuy.GetComponent&lt;SpriteRenderer&gt;()?您提到更改为 4 工作,所以这不是问题您的个人资料在此行 player.transform.position.y &lt; deadGuy.transform.position.y 使用 Debug.Log 并确保这是您想要的。

标签: unity3d unity5


【解决方案1】:

玩家对象似乎也处于排序顺序 0,所以当 deadGuy 对象被编写为进入排序顺序 0 时,由于具有优先权,它仍然显示在前面。

【讨论】:

    猜你喜欢
    • 2019-09-16
    • 1970-01-01
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多