Unity中如何让玩家粘在碰撞体上

问题描述 投票:0回答:1

我正在尝试制作一个游戏,你可以在 0 重力空间的小行星之间跳跃。我希望我的玩家能够粘在小行星上并能够沿着它的表面行走,直到他跳走。
我能够创建一些检查表面的东西,如果脚接地,我会从玩家向表面施加力,但在锋利的边缘或如果我走得太快,我的检查可能会失败并且我的玩家被推开。 我需要被抓伤,直到我决定不这样做为止。
我当前的代码:

private void CheckGrounded()
{
    // Perform a raycast to check for ground, ignoring trigger colliders
    RaycastHit2D hit = Physics2D.Raycast(feetPosition.position, -transform.up, feetDistanceCheck, groundLayer);

    if (hit)
    {
        // Align the player's rotation with the surface normal
        surfaceNormal = hit.normal;
        float angle = Mathf.Atan2(surfaceNormal.y, surfaceNormal.x) * Mathf.Rad2Deg - 90f;
        transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.Euler(0, 0, angle), 0.1f);
        rb.freezeRotation = true;
        isGrounded = true;

        // Apply surface attachment if not jumping
        if (jumpTimer <= 0)
            ApplySurfaceAttachment();
    }
    else
    {
        isGrounded = false;
        rb.freezeRotation = false;
    }
}
private void ApplySurfaceAttachment()
{
    Vector2 force = surfaceNormal * -surfaceTension;
    rb.AddForce(force);
}

实际要保持的良好行为:你可以选择慢慢走到一个地方,停下来,直跳。或者通过快速行走和跳跃来进行速跑,以保持动力,同时不刮伤表面。

c# unity-game-engine 2d game-physics
1个回答
0
投票

为了获得您想要的行为,您应该在玩家进入一定距离时向小行星中心添加重力,并具有较高的跳跃速度,以便玩家能够距离小行星足够远。这将导致玩家即使失去联系,仍然会被小行星吸引,除非他们距离足够远。可以调整力的大小和最大距离,以便玩家只有在跳跃时才会离开小行星。

© www.soinside.com 2019 - 2024. All rights reserved.