【问题标题】:Unity, powerup collision issue [closed]Unity,通电碰撞问题[关闭]
【发布时间】:2016-07-16 13:18:37
【问题描述】:

我的游戏中发生的逻辑和行为出现了一些问题。

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

【问题讨论】:

    标签: c# unity3d logic collision


    【解决方案1】:

    您的代码错误。你应该使用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 中进行碰撞。你必须使用“物理网格”...

    表示什么可以与什么发生冲突。在您的评论中,您说它们“不会碰撞”,但您绝对可以让任何东西与任何东西发生碰撞(或不碰撞)。

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

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

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

    【讨论】:

    • 嗯......好吧,但你应该完全按照我说的做:) 我朋友的关键是(见编辑)你的“惩罚”代码应该是“开”的英雄 - 你知道我的意思是什么?您需要将该代码“移至”您的英雄,明白吗?
    • 很公平。继续有趣!
    • 你绝对必须使用图层,我的朋友!必须的。物理层。
    • 就是这样。你实际上必须使用物理层。基本上,每一件事都需要自己的层。然后使用 PHYSICS GRID 来决定什么与什么发生碰撞。
    • 查看编辑。你绝对可以使用物理层来做到这一点——事实上你必须这样做!
    【解决方案2】:

    如果 NullReference 在这一行 gameObject.GetComponent&lt;PlayerControls&gt;().enabled = true; 可能是因为您尝试引用禁用组件。

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

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

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

    playerController.enable = true;  //or false
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-17
      • 1970-01-01
      • 2011-05-06
      • 1970-01-01
      • 1970-01-01
      • 2013-01-11
      相关资源
      最近更新 更多