人物不能移动,由于高摩擦

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

我有PhysicMaterial2D用于地面和我的性格麻烦。当字符不动,它的工作原理,因为我需要(这两种材料具有friction = 1.0)。但由于高摩擦系数的角色不能移动。 当然,我可以用更多的力(AddForce())移动的字符,但然后它会过于迅速转移使用其他材料的其他理由。

这是如何的问题在其他游戏(即多平台游戏)解决了吗?我应该设置人物的材料的摩擦,零在移动时(我没有其他想法)?或有更漂亮的解决方案吗?

preview

附:我与摩擦也更高价值的测试,但它导致了开始在移动旋转的字符。

添加 我试图设置boxCollider.sharedMaterial.friction = 0.0f的运动,并返回用户释放按钮后1.0f但性格继续为移动零摩擦虽然在记录我可以看到它的1.0f

private void Update()
{
    if (!paused)
    {
        if (Input.GetMouseButtonDown(0) && !IsOverPauseButton())
        {
            isPressed = true;

            endMovePoint = Input.mousePosition;
            isWalk = GetTouchDistance() > jumpTriggerRadius;

            if (!(isWalk || isJump))
            {
                StartCoroutine(Jump());
            }
        }
        else if (Input.GetMouseButtonUp(0) && isPressed)
        {
            boxCollider.sharedMaterial.friction = 1.0f;
            isPressed = false;
            isWalk = false;
            canFlip = true;
        }

        if (isWalk)
        {
            if (!isJump)
            {
                boxCollider.sharedMaterial.friction = 0.0f;
            }

            Walk();
        }

        animator.SetBool(WalkingFlag, isWalk && !isJump);
    }

    if (isWalk && !isJump)
    {
        FixSpeed();
    }

    Debug.Log("Friction=" + boxCollider.sharedMaterial.friction);
}
c# unity3d game-physics unity3d-2dtools
1个回答
0
投票

而不是使用摩擦,可以抑制玩家的运动。

假设你的球员有10的速度,你希望玩家停止它自己的协议的移动,因为这是很自然的。

什么,你会想要做的就是从您的播放器的速度每一帧例如减去量

player.velocity.x *= 0.9f;

这将玩家的X速度设置为它的原始速度的90%。该做的每一帧,很快你的播放器会自动停止所有。

如果上面的方法不会产生你想要的效果,你可以永远只是减去从玩家的速度任意值(当然,你必须考虑,如果玩家的速度是负的):

player.vel.x -= 1;

上述两种方法可以在摩擦系数,如果需要的话,简单地乘以摩擦系数加上或减去一个位的百分比或任意值,以满足您的需求。

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