【问题标题】:Unity Sprite not changing on command?Unity Sprite 不会根据命令更改?
【发布时间】:2015-08-11 02:23:41
【问题描述】:

这个精灵:

应该变成这些精灵之一(取决于加载的精灵)

当碰撞器 (LoseCollider) 接触到不同的游戏对象时:

我的问题是当 LoseCollider 被触发时,Spite 没有改变,也没有向我抛出任何错误。

相关代码为:

HealthManager.cs

public static Sprite[] healthSprites;
public static int totalHealth = 3;

public static Sprite Health1; 
public static Sprite Health2;
public static Sprite Health3;

LoseCollider.cs

void OnTriggerEnter2D (Collider2D trigger) {
    if (HealthManager.totalHealth == 3) {
        setSprite();
        HealthManager.totalHealth --;
    } else {
        levelManager = GameObject.FindObjectOfType<LevelManager>();
        levelManager.LoadLevel("Lose");
    }
}

void setSprite () {
    gameObject.GetComponent<SpriteRenderer>().sprite = HealthManager.Health2;
}

我试图发布所有相关信息,如果我需要包含更多信息,请告诉我。

【问题讨论】:

  • 你确定setSprite 被调用了吗?你确定HealthManager.Health2 确实与 Health2 sprite 相关联,而不是 Health3 或其他什么?
  • setSprite 被调用(我省略了方法中的打印语句)。根据我所读到的(不是不到一年的编程经验的专家)这一行:gameObject.GetComponent().sprite = HealthManager.Health2;应该调用health2。我不确定如何检查链接
  • “应该调用health2”是什么意思?你的 Health2 精灵是否真的与 HealthManager 对象上的“public static Sprite Health2”相关联?
  • 我在它们静止之前将它们连接到检查器中(我尝试了一种不同的方法来使其工作)但在使它们成为静态后检查器不提供连接。

标签: c# unity3d


【解决方案1】:

您需要停止为此使用静态。看来 HealthManager.Health2 从未设置为 null 之外的任何值。如果我正确解释了您的屏幕截图,您可以在底部照片中看到 Sprite is None。

此外,您的代码似乎表明您确实不希望 HealthManager 属性是静态的。您想要真正独立的 HealthManager 实例,根据您的使用情况,具有独立的健康值:

if (HealthManager.totalHealth == 3) {
    setSprite();
    HealthManager.totalHealth --;

消除 HealthManager 上的所有静态内容,将 HealthManager 的真实实例添加到您的 GameObject 并将其 Health1-3 精灵与您的精灵的真实引用相关联,它应该可以工作。

假设您如上所述更新 HealthManager,则以下语法是正确的:

gameObject.GetComponent<SpriteRenderer>().sprite = HealthManager.Health2;

【讨论】:

    猜你喜欢
    • 2017-01-19
    • 2016-04-21
    • 1970-01-01
    • 2019-02-22
    • 1970-01-01
    • 2019-05-14
    • 1970-01-01
    • 2015-01-01
    • 1970-01-01
    相关资源
    最近更新 更多