Unity3d 为什么不是';我对OnCollisionCenter()的定义是否正确?

Unity3d 为什么不是';我对OnCollisionCenter()的定义是否正确?,unity3d,physics,unityscript,unity3d-2dtools,Unity3d,Physics,Unityscript,Unity3d 2dtools,我有一个角色,一个布尔标志决定他是否在跳(如果他在跳,他不能再跳)。当他跳跃时,跳跃标志被设置为true,当他与某物碰撞时,它被设置为false(这样他可以再次跳跃) 然而,他只跳了一次,即使应该重置为false,跳跃仍然保持为真。为什么会这样?我对onCollisionCenter()的定义应该重置标志 var特朗普; var跳跃=假; 函数Start(){ //将刚体指定给变量 特朗普=GetComponent(Rigidbody2D); //可变开关: } 函数onCollisionCen

我有一个角色,一个布尔标志决定他是否在跳(如果他在跳,他不能再跳)。当他跳跃时,跳跃标志被设置为true,当他与某物碰撞时,它被设置为false(这样他可以再次跳跃)

然而,他只跳了一次,即使应该重置为false,跳跃仍然保持为真。为什么会这样?我对
onCollisionCenter()
的定义应该重置标志

var特朗普;
var跳跃=假;
函数Start(){
//将刚体指定给变量
特朗普=GetComponent(Rigidbody2D);
//可变开关:
}
函数onCollisionCenter(){
跳跃=假;
特朗普速度y=0;
特朗普速度x=0;
}
函数FixedUpdate(){
trump.velocity.x=输入.GetAxis(“水平”)*10;
if((Input.GetKeyDown(KeyCode.UpArrow))&&(jump==false)){
特朗普。加动力(向量2(0,10),力模2D。冲动);
跳跃=真;
}
}
编辑:根据给出的答案,我尝试将
Collision
参数添加到
OnCollisionEnter()
,但在我将
Debug.Log()
添加到函数中进行检查后,该函数似乎仍没有被调用。还有什么不对劲吗

函数onCollisionCenter(冲突:冲突){
跳跃=假;
log(“他撞到了墙”);
特朗普速度y=0;
特朗普速度x=0;
}

您的
OnCollisionCenter()
函数签名不正确。定义这些特定于单行为的函数时,函数的名称和参数必须与文档中显示的匹配。否则,MonoBehavior将无法识别它们,并且不会在预期的情况下调用该函数

在这种情况下,需要一个
碰撞
参数:

函数onCollisionCenter(冲突:冲突){
跳跃=假;
特朗普速度y=0;
特朗普速度x=0;
}
注意:以上内容是在编辑问题以实现建议之前编写的-之前,
onCollisionCenter()
的定义没有参数

然而,在您的例子中,这并不是唯一的问题-您使用的是Unity的2D物理,这意味着您实际上应该使用函数的2D变体:,它还接受一个稍微不同的参数
碰撞2D

因此,您需要:

函数onCollisionInter2D(碰撞:Collision2D){ 跳跃=假; 特朗普速度y=0; 特朗普速度x=0; }

希望这有帮助!如果您有任何问题,请告诉我。

我是特朗普。他不让别人告诉他该做什么:-p-说真的,不过,
特朗普为什么不跳不止一次?
是迄今为止我见过的最有趣、最疯狂的问题标题;-)因为这个原因,这个吸引了我的眼球。XP,但我真的很想编辑标题,使其成为未来更有用/更可搜索的问题…@serlite-只要看到要编辑的内容,请始终单击“编辑”make@Number1son100-不能使用“unityscript”。它已被弃用,不起作用,正在从Unity中删除。幸运的是c#要容易得多。我该如何解决这个问题?@Number1son100嘿,我仔细研究了你的问题,你是对的,还有其他问题。我已经更新了我的答案来反映这一点,让我知道它是如何进行的。你想要双跳吗?谢谢!不过我该怎么做呢?@Number1son100很高兴我能帮上忙!我将尝试回答Barış-在双跳转的情况下,您只需稍微更改逻辑,以使用计数器(如
var jumpsRemaining=2
)来跟踪跳转,而不是布尔标志。仅允许在
jumpsRemaining>1
时进行跳转,并在每次后续跳转时从中减去1。然后,当你与某物碰撞时,将其重置为所需的跳跃次数(如2)。