我是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();
}
}
}
我很乐意提出任何建议。
谢谢!
答案 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 ....;
}