精灵不更新碰撞

时间:2021-03-25 22:10:50

标签: unity3d sprite 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;
    }
}

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

enter image description here

1 个答案:

答案 0 :(得分:0)

您是否考虑将 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碰撞已退出。

相关问题