Unity,powerup碰撞问题

时间:2016-07-16 13:18:38

标签: c# unity3d logic collision unityscript

我在逻辑和游戏中发生的行为方面遇到了一些问题。

我想要实现一个通电,这个通电只会在一段时间内停止这个角色。所以要做到这一点,我只是禁用他的脚本,所以他什么都不做。现在这是有效的,但问题是我找不到一种方法让脚本在5秒后回复给他。我想停止角色2秒钟。

2 个答案:

答案 0 :(得分:3)

你的代码错了。您应该使用Invoke

非常简单。

像...一样的东西。

void ApplyPenalty()
{
    yourPauseSystem = true;
    Debug.Log("starting penalty..");
    Invoke("EndPenalty", 5f);
}

void EndPenalty()
{
    yourPauseSystem = false;
    Debug.Log("    ...ended penalty");
}

不要忘记 Debug.Log语句。

请注意,理想情况下ApplyPenalty(和EndPenalty)应为

实际上是这些游戏对象。

实际上将该代码放在那些游戏对象上,而不是在“碰撞对象代码”中。你明白了吗?

所以在你的情况下,要应用惩罚,它将是......

void OnCollisionEnter(Collision c)
{
    if ( (c.gameObject.tag == "Character") )
        c.GetComponent<YourHerosCode?().ApplyPenalty()
}
你知道吗?

你必须使用物理层系统。你必须使用它在Unity中进行冲突。你必须使用“物理网格”......

enter image description here

表示什么可以碰到什么。在你的评论中,你说他们“不会碰撞”,但你绝对可以使任何东西碰撞(或不碰撞)。

请注意,在实践中,一切都需要在Unity中拥有自己的物理层。

当然,你的英雄,敌人等都有自己的层。

提示:当然“敌人的射弹”和“球员射弹”都需要各自独立的层。

答案 1 :(得分:1)

如果NullReference在此行gameObject.GetComponent<PlayerControls>().enabled = true;,可能是因为您尝试引用禁用组件。

尝试将Start()中的var赋给组件

var playerController = gameObject.GetComponent<PlayerControls>();

然后使用它来引用它并启用/禁用它:

playerController.enable = true;  //or false