C# 我正在做一个像《团结的十字路口》这样的游戏,问题是,为什么玩家会飞走

C# 我正在做一个像《团结的十字路口》这样的游戏,问题是,为什么玩家会飞走,c#,unity3d,C#,Unity3d,基本上,当玩家碰到障碍物向上时,游戏会生成一条车道,没关系,问题是:如果他击中障碍物3次,走到一边,在没有碰到障碍物的情况下向上跳,玩家将跳过4条车道,而不是1条 当玩家撞上障碍物并试图取消移动时,我试图破坏下一条车道,但这会使游戏崩溃或出错 内部新闻旅行 { int stripsPrefabCount=poolOfStripsPrefabs.Length; int randomNumber=随机。范围0,stripsPrefabCount; GameObject item=poolOfStri

基本上,当玩家碰到障碍物向上时,游戏会生成一条车道,没关系,问题是:如果他击中障碍物3次,走到一边,在没有碰到障碍物的情况下向上跳,玩家将跳过4条车道,而不是1条

当玩家撞上障碍物并试图取消移动时,我试图破坏下一条车道,但这会使游戏崩溃或出错

内部新闻旅行 { int stripsPrefabCount=poolOfStripsPrefabs.Length; int randomNumber=随机。范围0,stripsPrefabCount; GameObject item=poolOfStripsPrefabs[randomNumber]作为GameObject; Transform itemChildTransform=item.Transform.GetChild0作为转换; Transform itemChildOfChildTranform=itemChildTransform.GetChild 0作为转换; float itemWidth=ItemChildTofChildTranform.gameObject.GetComponent.bounds.size.x; GameObject lastStrip=strips[strips.Count-1]作为GameObject; GameObject newStrip=将项目、lastStrip.transform.position、lastStrip.transform.rotation实例化为GameObject; newStrip.transform.position=newvector3 newStrip.transform.position.x-itemWidth,newStrip.transform.position.y,newStrip.transform.position.z; 添加新闻旅行; } 内部空隙跳变 { ifgameIsPlaying==false 回来 条带相关指数+=1; 如果条带当前索引>高加载条带的索引 { 分数+=1; scoreText.text=分数:+Score.ToString; HighestRoadStrip的索引=stripsCurrentIndex; Debug.Lognew分数:+indexOfTheHighestRoadStrip.ToString; } GameObject nextStrip=条带[StripsCorrentIndex]作为GameObject; JumpTargetLocation=新矢量3 nextStrip.transform.position.x-jumpOffsetX,transform.position.y,transform.position.z; midWayPointX=JumpTargetLocation.x+this.transform.position.x-JumpTargetLocation.x/2; mesh.transform.localEulerAngles=新矢量3 0,180,0; 新闻之旅; float distance x=this.transform.position.x-JumpTargetLocation.x; BoundaryLeft.transform.position-=新向量3距离x,0,0; BoundaryRight.transform.position-=新向量3距离X,0,0; } 内部空跳 { ifgameIsPlaying==false 回来 条带相关指数-=1; 如果StripsCorrentIndex<0 { StripsCorrentIndex=0; 回来 } GameObject previousStrip=将[StripsCorrentIndex]条带作为GameObject; JumpTargetLocation=新向量3 previousStrip.transform.position.x-jumpOffsetX,transform.position.y,transform.position.z; midWayPointX=JumpTargetLocation.x-JumpTargetLocation.x-this.transform.position.x/2; mesh.transform.localEulerAngles=新矢量3 0,0,0; float distance x=JumpTargetLocation.x-this.transform.position.x; BoundaryLeft.transform.position+=新向量3距离X,0,0; BoundaryRight.transform.position+=新向量3距离X,0,0; }
只是希望玩家在碰到障碍物后能正常跳跃。

因此,在跳跃时,你可以用一个增加StripsCorrentIndex。但是,如果您遇到障碍物,该值不会减小。这意味着,如果您在stripCurrentIndex=0处并跳入障碍物三次,它将设置stripCurrentIndex=3。即使你的立场没有改变。然后,当您跳到一边并向上跳时,您可以从stripCurrentIndex=4检索条带。因此,您将跳过四个空格

因此,在遇到障碍物时,必须减小索引,如下所示

if (isJumpingUp)
{
    offsetUpDown = 2.5f;
    stripCurrentIndex -= 1;
}

else if (isJumpingDown)
{
    offsetUpDown = -2.5f;
    stripsCurrentIndex += 1;
}

或者重构代码,使索引仅在实际到达位置后才递增。以设置目标-执行实际移动-增量索引的方式。

不幸的是,这是一个很大的代码块,您不太可能得到太多帮助。请参阅:,特别是这一部分:帮助他人重现问题……但不要只是复制整个程序…它可能包含许多不相关的细节,读者在试图重现问题时需要忽略这些细节。以下是一些指导原则:包括足够的代码,以允许其他人重现问题。有关这方面的帮助,请阅读如何创建一个最小的、完整的、可验证的示例。@MatthewWetmore它现在看起来更好了吗?我希望如此,我是新的网站,仍在学习,谢谢你的建议。你也应该学习。我知道,在我的代码中,我使用真与假来设置位置,但现在我认为我的有点复杂。。。所以我应该使用重置命令以防玩家跳起来…啊。我正在改变我的答案以适应新的信息。非常感谢你,我在试图弄明白它时失去了理智。