如果我们在水中,我们可以通过中止SnapToGround来避免这种情况。 bool SnapToGround () { if (stepsSinceLastGrounded > 1 || stepsSinceLastJump <= 2|| InWater) { return false; } … } 游泳 现在我们可以在水中漂浮了,下一步就是支持游泳,其中应该包括潜水和浮潜。 游泳门槛 我们只有在水深的情况下才能...
groundContactCount = climbContactCount; contactNormal = climbNormal;returntrue; }returnfalse; } 在UpdateState检查我们是否有地面接触时,首先调用此方法,因此攀爬否决其他所有规则。 if ( CheckClimbing() ||OnGround || SnapToGround() || CheckSteepContacts() ) { … } if ( CheckClimbing() ||OnGroun...
最后,在SnapToGround中探查地面时,我们必须用负的上轴代替Vector3.down。 boolSnapToGround(){ …if(!Physics.Raycast( body.position,-upAxis,outRaycastHit hit, probeDistance, probeMask )) {returnfalse; } … }boolSnapToGround(){ …if(!Physics.Raycast( body.position,-upAxis,outRaycastHit hit, p...
这样一来,除了攀登外,游泳优先。 然后从SnapToGround中删除检查是否在水中。当我们在水中而不是在游泳时,这使得捕捉动作再次起作用。 3.2 游泳速度 为游泳增加一个可配置的最大速度和加速度,默认设置为5。 (最大的游泳速度和加速度) 在AdjustVelocity中,检查攀爬后再检查是否在水中。如果是这样,请使用与通常情况...
当我们需要点积时,我们也不能再直接使用法向向量的Y分量。我们必须使用上轴和法线向量作为参数来调用Vector3.Dot。首先在SnapToGround中,检查我们是否发现地面。 float upDot =Vector3.Dot(upAxis, hit.normal); if (upDot< GetMinDot(hit.collider.gameObject.layer)) { return false; } ...
如果我们在SnapToGround中检测到地面,也应该跟踪连接的物体。 最后,在ClearState中将连接的正文重置为null。 2.2 连接状态 仅仅知道我们在当前物理步长中已连接到主体是不够的。我们必须能够弄清楚自上一步以来我们是否仍与同一个主体保持联系,因为这表明我们应该与之保持联系。因此,我们需要另一个字段来存储对先前连接...
发生这种情况是因为我们将其压在了地面上。在这种情况下,可以通过降低“Max Snap Speed ”来解决,但这种方法不适用于设置为低速的加速区域。通常,为了防止被地面捕捉,我们必须指示MovingSphere暂时不要执行捕捉。为此,我们可以向其添加一个公共的PreventSnapToGround方法,该方法将stepsSinceLastJump设置为-1。
为了追踪自接地以来已经历的物理步长,我们可以添加一个整数字段并在UpdateState的开头对其进行递增。在地面上时,将其设置回零。这将有助于我们确定何时应该贴紧地面。此外,通过在OnGround为false时调用SnapToGround方法,我们可以始终确保球体贴着地面。射线检测是确保球体贴紧地面的关键。通过垂直从球体...
voidUpdateState(){stepsSinceLastGrounded+=1;velocity=body.velocity;if(OnGround||SnapToGround()){…}…} SnapToGround只会在我们脱离地面时调用,所以脱离地面后的步长数量是大于0的。不过我们应该在脱离接触的一瞬间贴住地面,所以当步长数大于1时应该终止投射操作。
public void PreventSnapToGround () { stepsSinceLastJump = -1; } public void PreventSnapToGround () { stepsSinceLastJump = -1; } 1. 2. 3. 4. 现在AccelerationZone.Accelerate可以在主体具有MovingSphere组件的情况下调用此方法,我们可以通过调用TryGetComponent球体作为输出参数来进行检查和检索。