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
^^调用它来消除。另外请注意,在不更改任何内容的情况下使用脚本