检测Unity中的斜率

4

我正在使用 Unity 制作2D游戏,希望能够检测玩家是否站在斜坡上。

我使用了以下代码进行斜坡检测,但是此代码仅在玩家朝下(向下移动)斜坡时可用。当玩家朝上(向上移动)斜坡时,此代码会返回 false

private bool OnSlope()
{
    if (isJumping)
        return false;

    RaycastHit2D hit = Physics2D.Raycast(groundCheck.position, Vector2.down, 0.5f, whatIsGround);

    if (hit.collider)
        if (hit.normal != Vector2.up)
            return true;
    return false;
}

有人能告诉我如何修改这段代码,使其在玩家上下移动到斜坡时可以正常工作吗?

谢谢。

2个回答

0
if (hit.collider)
    return true
return false

我相信如果射线没有与地面相交,碰撞器就不会存在。


0
你的玩家在转身时会改变前进方向吗?
如果是这样,你可以通过计算玩家前进方向与斜率法线的点积来判断。
如果积为正,则玩家的前进方向通常与坡道方向一致-因此他们面朝下山;如果积为负,则向量通常面朝相反方向,因此玩家面朝上山。
if(Mathf.sign(Vector2.Dot(transform.forward,hit.normal) == 1){
    // facing downhill
else{
    // facing uphill
}

如果你在转身时不改变你的前向量,你可以根据最后一个输入的方向始终存储自己的前向量。希望这有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接