【发布时间】:2020-12-08 17:18:19
【问题描述】:
我有一个可以在我的玩家对象上启用射击脚本的道具。 powerup 脚本在我的 powerup 对象上。现在,当我使用
启用脚本时player.GetComponent<ShootingRocket>().enabled = true;
它工作正常,但是当我在 5 秒后尝试禁用脚本时,它什么也没做。这是我用于此的脚本:
void OnTriggerEnter2D(Collider2D other)
{
if (other.CompareTag("Player"))
{
StartCoroutine(Pickup(other));
}
}
IEnumerator Pickup(Collider2D player)
{
player.GetComponent<ShootingRocket>().enabled = true;
GetComponent<SpriteRenderer>().enabled = false;
GetComponent<Collider2D>().enabled = false;
yield return new WaitForSeconds(sec);
player.GetComponent<ShootingRocket>().enabled = false;
Destroy(gameObject);
}
我已经为时间做了一个变量:
public float sec = 5f;
我不知道我做错了什么。如果有人可以帮忙,请做。
如果您认为问题出在其他地方,我可以提供任何其他脚本。 我是 Unity 和 c# 的新手,一般来说是一种编码,所以如果有人能提供帮助,我将不胜感激。谢谢!
【问题讨论】:
-
您确定正在调用
OnTriggerEnter2D吗?在里面放一个Debug.Log声明。 -
正如@ben 这里所说的,检查是否调用了 OnTriggerEnter。或者,您可以尝试使用 Invoke 而不是 IEnnumerator。问题在于 colider i 的东西。您的播放器是否附加了 Rigidbody2D?
-
感谢您的回复。我把 'Debug.Log("捡起来了!"); ' 在 'if (other.CompareTag("Player"))' 中,它表明它是在控制台中拾取的。此外,shootingRocket 脚本在启动时被禁用,它在此处启用 'player.GetComponent
().enabled = true;'那行得通。当设定时间过去时,游戏对象被破坏,但只有再次禁用脚本的脚本部分不起作用。我还放了 'Debug.Log("Disabling"); '在'之后'产生返回新的WaitForSeconds(sec);'并且没有显示在控制台中。
标签: c# unity3d scripting disable