Raycast 仅在特定高度有效
Raycast only works at a specific height
我想为学校项目制作 3D 平台游戏。
由于我在游戏开发方面经验不足,所以我遵循了 Plai 的教程。我最大的问题是我一直在滑下斜坡和斜坡检测。它仅在斜坡下方有表面时检测斜坡,玩家 has some distance from the ground 但离地面不太远。
这是检测斜率的方法。
尝试对其进行编辑,但似乎没有任何效果。
if (Physics.Raycast(transform.position, Vector3.down, out slopeHit, playerHeight / 2 * 5f))
{
if (slopeHit.normal != Vector3.up) return true;
}
Color rayColor;
if (slopeHit.collider != null) rayColor = Color.green;
else rayColor = Color.red;
Debug.DrawRay(transform.position, Vector3.down, rayColor);
return slopeHit.collider != null;
第一部分不错
if (Physics.Raycast(transform.position, Vector3.down, out slopeHit, playerHeight / 2 * 5f))
{
if (slopeHit.normal != Vector3.up) return true;
}
如果你撞到某物并且它是一个斜坡你已经 return
。
否则你执行剩下的,即使你可能根本不会击中任何东西。
您可能更愿意这样做
if (Physics.Raycast(transform.position, Vector3.down, out var slopeHit, playerHeight / 2f * 5f))
{
var isSlope = slopeHit.normal != Vector3.up;
Debug.DrawLine(transform.position, slopeHit.point, isSlope ? Color.yellow : Color.green);
return isSlope;
}
//meaning you don't hit anything at all
Debug.DrawRay(transform.position, Vector3.down, Color.red);
return false;
我想为学校项目制作 3D 平台游戏。 由于我在游戏开发方面经验不足,所以我遵循了 Plai 的教程。我最大的问题是我一直在滑下斜坡和斜坡检测。它仅在斜坡下方有表面时检测斜坡,玩家 has some distance from the ground 但离地面不太远。
这是检测斜率的方法。 尝试对其进行编辑,但似乎没有任何效果。
if (Physics.Raycast(transform.position, Vector3.down, out slopeHit, playerHeight / 2 * 5f))
{
if (slopeHit.normal != Vector3.up) return true;
}
Color rayColor;
if (slopeHit.collider != null) rayColor = Color.green;
else rayColor = Color.red;
Debug.DrawRay(transform.position, Vector3.down, rayColor);
return slopeHit.collider != null;
第一部分不错
if (Physics.Raycast(transform.position, Vector3.down, out slopeHit, playerHeight / 2 * 5f))
{
if (slopeHit.normal != Vector3.up) return true;
}
如果你撞到某物并且它是一个斜坡你已经 return
。
否则你执行剩下的,即使你可能根本不会击中任何东西。
您可能更愿意这样做
if (Physics.Raycast(transform.position, Vector3.down, out var slopeHit, playerHeight / 2f * 5f))
{
var isSlope = slopeHit.normal != Vector3.up;
Debug.DrawLine(transform.position, slopeHit.point, isSlope ? Color.yellow : Color.green);
return isSlope;
}
//meaning you don't hit anything at all
Debug.DrawRay(transform.position, Vector3.down, Color.red);
return false;