为什么我的玩家死后不可见?

时间:2020-05-06 07:22:44

标签: c# unity3d scripting

我是Unity的初学者。我正在Unity 2D中制作游戏。在这个游戏中,我有一个玩家,一个平台和一个 die_zone ,但是当我的玩家死亡时,他的精灵就变得不可见了。如何更改脚本以使精灵可见?

以下是脚本:

using UnityEngine;

public class Death : MonoBehaviour
{
    public GameObject Respawn;
    public Sprite Player_;
    public GameObject Player;
    public GameObject die_zone1;
    public GameObject die_zone2;
    public GameObject die_zone3;
    public GameObject die_zone4;

    public void die()
    {
        Player.transform.position = Respawn.transform.position;
        Player.GetComponent<SpriteRenderer>().sprite = Player_;
    }

    void OnTriggerEnter2D(Collider2D deth)
    {
        if (die_zone1.tag == "Death" || die_zone2.tag == "Death" || die_zone3.tag == "Death" || die_zone4.tag == "Death")
        {
            die();
        }
    }
} 

我很乐意提出任何建议。

谢谢!

2 个答案:

答案 0 :(得分:1)

让我们分解代码以遍历其失败点。

using UnityEngine;

public class Death : MonoBehaviour
{
    public GameObject Respawn;
    public Sprite Player_;
    public GameObject Player;
    public GameObject die_zone1;
    public GameObject die_zone2;
    public GameObject die_zone3;
    public GameObject die_zone4;

类型/字段声明,可能不是您的问题

    public void die()
    {
        Player.transform.position = Respawn.transform.position;
        Player.GetComponent<SpriteRenderer>().sprite = Player_;
    }

可疑,因为您的错误会在您死后发生。但是也许还有其他代码正在执行?

    void OnTriggerEnter2D(Collider2D deth)
    {
        if (die_zone1.tag == "Death" || die_zone2.tag == "Death" || die_zone3.tag == "Death" || die_zone4.tag == "Death")
        {
            die();
        }
    }
} 

嗯,看起来足够安全。有条件调用die()。大概您的代码可能在条件(diezonetag == ...)中崩溃,但是这会在不编辑Player对象的情况下中止进一步执行。大概还可以。

好的,这样就剩下die()了。有两行,每行都是一个故障点。它们似乎是彼此独立的变化(移动玩家,改变其精灵),因此也许您可以单独测试它们以确定罪魁祸首。您可以通过注释掉它,运行并查看游戏是否仍然中断来实现此目的。如果可行,则注释掉另一个(并取消注释第一个),运行,并希望您的游戏能够中断。

        Player.transform.position = Respawn.transform.position;

嗯,那么Respawn.transform.position的值是多少?如果屏幕外或屏幕无效,则可能会怀疑您的播放器位置在屏幕外或屏幕无效。

您可以通过在播放机死亡之前/之后查看您的场景视图来调试此程序。他们之前/之后的立场是什么?

        Player.GetComponent<SpriteRenderer>().sprite = Player_;

Player_设置为什么?也许是空的吗?或者,如果您将播放器的精灵更改为它的死亡状态精灵编辑器,您看到了什么吗?也许您的死亡精灵是完全透明的,或者您的死亡精灵和spriterenderer的设置相结合使其无法显示在屏幕上?

当您单击播放器对象时,sprite字段是否出现在检查器中,并且它设置为理智的东西吗?

实际上,您是将Sprite设置为GameObject。那应该如何工作?您是否将Sprite设置为包含您的Sprite而不是Sprite本身的GameObject?这似乎不应该编译。根据Unity的文档(我在https://docs.unity3d.com/ScriptReference/SpriteRenderer.html上通过谷歌搜索unity spriterenderer sprite得到了),SpriteRenderer.sprite的类型是Sprite,而您有一个GameObject。似乎有问题。

答案 1 :(得分:0)

删除此行,或检查Player_的精灵。还要仔细检查他是否不可见或只是移回生成点。

  public boolean OurAim(MenuItem item) {
    // actions
    return ....;
  }