//示例 1
if(hitInfo.collider.gameObject.layer == enemyMask && !lookedAtEnemy)
{
LookingAtEnemy?.Invoke();
lookedAtEnemy = true;
}

if(hitInfo.collider.gameObject.layer != enemyMask && lookedAtEnemy)
{
    NotLooking?.Invoke();
    lookedAtEnemy = false;
}

//----- 或者 ------

//示例 2    
if(hitInfo.collider.gameObject.layer == enemyMask) 
{
    LookingAtEnemy?.Invoke();        
} else 
{
    NotLooking?.Invoke();
}

无论是出于性能考虑还是只是为了方便起见。LookingAtEnemy和NotLooking激活和停用UI元素,如敌人生命条、轮廓等。示例2是最早我写的,因为它更符合我的直觉,但接着我想了想,是否我真的想重复调用?我只是想知道是否只调用一次状态变化时调用 invoke 是否更有效。性能是否会更好?我不确定。另外,我还是个初学者,所以如果这是一個傻问题,请原谅我。

噢,还有,如果检测玩家是否在看敌人的方法不优化,请告诉我更好的方法。谢谢:>

编辑:是的,我知道如果玩家没有看任何东西,状态就不会改变并被卡住。我只是想先把这个出来。