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