Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d Unity:OnCollisionCenter仅在新条目上激发,但不在同名的不同对象上的新条目上激发_Unity3d - Fatal编程技术网

Unity3d Unity:OnCollisionCenter仅在新条目上激发,但不在同名的不同对象上的新条目上激发

Unity3d Unity:OnCollisionCenter仅在新条目上激发,但不在同名的不同对象上的新条目上激发,unity3d,Unity3d,我正在用显示框构建一个平台。当玩家点击框时,框就会被渲染。这很好,就像这样: public class AppearingBoxes : MonoBehaviour { public GameObject Block, RageFace; bool showBlock = false; void Start() { showBlock = false; } void OnCollisionEnter(Collision2D

我正在用显示框构建一个平台。当玩家点击框时,框就会被渲染。这很好,就像这样:

public class AppearingBoxes : MonoBehaviour
{
    public GameObject Block, RageFace;

    bool showBlock = false;

    void Start()
    {
        showBlock = false;
    }


    void OnCollisionEnter(Collision2D col)
    {
        if (col.gameObject.name == "Birdy") 
        {
            showBlock = true;
        }
    }

    void FixedUpdate()
    {
        Block.GetComponent<Renderer>().enabled = showBlock;
        RageFace.GetComponent<Renderer>().enabled = showBlock;
    }
}
公共类外观框:单一行为
{
公共游戏对象块,RageFace;
bool showBlock=false;
void Start()
{
showBlock=false;
}
无效碰撞中心(碰撞2D列)
{
如果(col.gameObject.name==“Birdy”)
{
showBlock=true;
}
}
void FixedUpdate()
{
Block.GetComponent().enabled=showBlock;
RageFace.GetComponent().enabled=showBlock;
}
}
此脚本附加到所有这些框。每个框都是一个单独的框,但都具有相同的脚本、属性和名称:

但问题来了。只有第一次击中才会触发一个方块。你可以想象,玩家跳到那些看不见的盒子上,然后触发他击中的盒子。玩家现在向前移动到其他仍然看不见的盒子上,并进入那里的打盒子。然而,他们没有出现。我相信这是因为玩家仍然在“相同”的命中框中,即使它是不同的预制对象。如果我跳到看不见的平台上,然后倒下(我离开,然后重新扣上扳机),我降落的箱子就会立即出现

那么,我该怎么做才能让玩家一触框就出现,即使他以前没有离开过框的击框

谢谢!:)

  • 尝试将长方体碰撞器更改为isTrigger,并使用OnTriggerEnter2D

  • 或者可能是因为您使用了OnCollisionInter而不是OnCollisionInter2D

      • 尝试将长方体碰撞器更改为isTrigger,并使用OnTriggerEnter2D

      • 或者可能是因为您使用了OnCollisionInter而不是OnCollisionInter2D


      您的代码中存在问题。我不知道您是否遗漏了这一点,或者这是一个输入错误,但您不能将
      OnCollisionCenter
      Collision2D
      参数一起使用。您的游戏将运行,但必须显示以下错误消息:

      Script error: OnCollisionEnter
      This message parameter has to be of type: Collision
      The message will be ignored.
      
      改用
      OnCollisionInter2D

       void OnCollisionEnter2D(Collision2D col)
      {
          if (col.gameObject.name == "Birdy") 
          {
              showBlock = true;
          }
      }
      

      您的代码中有一个问题。我不知道您是否遗漏了这一点,或者这是一个输入错误,但您不能将
      OnCollisionCenter
      Collision2D
      参数一起使用。您的游戏将运行,但必须显示以下错误消息:

      Script error: OnCollisionEnter
      This message parameter has to be of type: Collision
      The message will be ignored.
      
      改用
      OnCollisionInter2D

       void OnCollisionEnter2D(Collision2D col)
      {
          if (col.gameObject.name == "Birdy") 
          {
              showBlock = true;
          }
      }
      
      各位,我确实找到了一个“解决办法”,它不能真正解释这个问题,但alreast有效

      我所做的是增加每一个盒子的BoxCollider的大小,只是稍微多一点。比如比玩家站的实际盒子大3个像素。这解决了问题,但让我怀疑:如果玩家没有“真的”与对撞机发生碰撞,那么他就会失败。但他没有。现在对撞机稍微大一点,所有的东西都被完美地触发了。也许是引擎有毛病

      谢谢大家的帮助,我确实找到了一个“解决办法”,虽然它不能真正解释问题,但它确实有效

      我所做的是增加每一个盒子的BoxCollider的大小,只是稍微多一点。比如比玩家站的实际盒子大3个像素。这解决了问题,但让我怀疑:如果玩家没有“真的”与对撞机发生碰撞,那么他就会失败。但他没有。现在对撞机稍微大一点,所有的东西都被完美地触发了。也许是引擎有毛病


      谢谢你的帮助

      他没有摔倒,因为对撞机没有触发,仅此而已

      他没有摔倒,因为对撞机不是触发器,仅此而已

      当您在游戏中时,
      Block
      RageFace
      是否分配给了相应的
      gameobjects
      ?为什么不在if语句中将
      Renderer
      设置为true并使用
      FixedUpdate
      ?如果(col.gameObject.name==“Birdy”){Block.GetComponent().enabled=true}Hello,是的,它们当然都是指定的,您可以编写
      if(col.gameObject.name==“Birdy”){Block.GetComponent().enabled=true}
      Hello。如果他们没有,不管我跳不跳,他们都不会出现。但他们确实出现了,但不幸的是,他们是在第二次进入他们的hitbox后才出现的。也,我在FixeUpdate中这样做是因为只是检查冲突有一点延迟,我就这样做了……没有任何意义,直接启用渲染器所导致的延迟可以通过稍后使用
      FixeUpdate
      ^^调用它来消除。另外请注意,使用脚本时不更改任何内容一个非常基本的
      boxCollizer2d
      RigidBody2D
      设置(为了测试,我将一些外观框分开,另一些重叠并使用不同的高度)->当您在游戏中时,
      Block
      RageFace
      分配给相应的
      gameobjects
      没有问题?为什么不在if语句中将
      Renderer
      设置为true并使用
      FixedUpdate
      ?如果(col.gameObject.name==“Birdy”){Block.GetComponent().enabled=true}Hello,是的,它们当然都是指定的,您可以编写
      if(col.gameObject.name==“Birdy”){Block.GetComponent().enabled=true}
      Hello。如果他们没有,不管我跳不跳,他们都不会出现。但他们确实出现了,但不幸的是,他们是在第二次进入他们的hitbox后才出现的。也,我在FixeUpdate中这样做是因为只是检查冲突有一点延迟,我就这样做了……没有任何意义,直接启用渲染器导致的延迟可以通过稍后使用
      FixeUpdate
      ^^调用它来消除。另外请注意,在不更改任何内容的情况下使用脚本