本来是想通过OnTriggerStay来检测玩家与物品的碰撞,如果一直处于碰撞中,且按下了K键,那么就能拾取。
但是用这种方法总会有某种延迟的问题(可能是跟碰撞检测频率有关),导致我按多次K键才有可能捡起物品。
--2024.6.4 更新: 2022.2版本的Unity中,2d刚体组件中有一个sleeping mode,用于在对象处于静止时暂时将其从物理模拟中移除。不确定这里OnTriggerStay是否与此有关
所以换一种思路,开始碰撞时将某bool值设为true,结束碰撞时设为false。然后在Update中检测bool值和按键,拾取物品。
bool CanBePick = false;
private void OnTriggerEnter(Collider other)
{
CanBePick = true;
("玩家与装备开始碰撞");
}
private void OnTriggerExit(Collider other)
{
CanBePick = false;
("玩家与装备脱离碰撞");
}
private void Update()
{
if (CanBePick)
{
if (())
{
AddNewItem();
Destroy(gameObject);
("玩家已捡起");
}
}
}