精灵不更新碰撞

Sprite not updating on collision

有人可以解释为什么这段代码没有按预期工作吗?目前,如果发生碰撞,精灵(标志)会变为绿色。调试语句按我预期的那样工作,但在没有碰撞的情况下精灵(标志)不会变回红色。

public Sprite gflag;
public Sprite rflag;
public SpriteRenderer render;
public GameObject Player;
private Checkpoint checkpoint;
private bool hit = false;

void Update()
{
    if(hit != true)
    {
        Debug.Log("False!");
        render.sprite = rflag;
    }
}

// Modify color of flag depending on collision
void OnTriggerEnter2D(Collider2D collider)
{
    if (collider.gameObject.tag == "Player")
    {
        Debug.Log("True!");
        render.sprite = gflag;
        hit = true;
    }
}

这是检查点预制件的屏幕截图:

您是否考虑过将 Update() 函数中的逻辑移动到 OnTriggerExit2D 函数中?

public Sprite gflag;
public Sprite rflag;
public SpriteRenderer render;
public GameObject Player;
private Checkpoint checkpoint;
private bool hit = false;

// Modify color of flag depending on collision
void OnTriggerEnter2D(Collider2D collider)
{
    if (collider.gameObject.tag == "Player")
    {
        Debug.Log("True!");
        render.sprite = gflag;
        hit = true;
    }
}

// Modify color of flag depending on collision
void OnTriggerExit2D(Collider2D collider)
{
    if (collider.gameObject.tag == "Player")
    {
        Debug.Log("False!");
        render.sprite = rflag;
        hit = false;
    }
}

这样,就不会在 Update 每一帧都进行检查,而是完全在碰撞函数中进行处理。

编辑:回答你最初的问题,在没有碰撞的情况下代码没有将标志更新回红色的原因是你没有将 hit 布尔值设置为 false一旦碰撞退出。