由于高摩擦,角色无法移动

Posted

技术标签:

【中文标题】由于高摩擦,角色无法移动【英文标题】:The character can't move due to high friction 【发布时间】:2019-06-21 04:18:50 【问题描述】:

PhysicMaterial2D 对于地面和我的角色有问题。当角色不动时,它会按我的需要工作(两种材料都有friction = 1.0)。但由于摩擦值高,角色无法移动。 当然,我可以使用更大的力量 (AddForce()) 来移动角色,但是在使用其他材料的其他理由上它会移动得太快。

这个问题在其他游戏(即许多平台游戏)中是如何解决的?我是否应该在角色移动时将角色材质的摩擦力设置为零(我没有其他想法)?还是有更漂亮的解决方案?

P.S.我也测试了更高的摩擦值,但它导致角色在移动时开始旋转。

添加 我尝试在运动上设置boxCollider.sharedMaterial.friction = 0.0f,并在用户释放按钮后返回1.0f BUT 角色继续以零摩擦的方式移动,尽管在记录器中我可以看到它是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);

【问题讨论】:

大多数时候,游戏角色,尤其是玩家角色,并不遵循物理引擎,而是有特定的控制器来移动它们。 @Kamalen,我明白你的意思,它适合简单的平台游戏,但不幸的是,我的游戏在很多方面都需要 2D 物理,因为这款游戏的主要思想是基于物理的。跨度> 这不排除物理学。您可以制作仍然与所有其他对象交互的自定义​​控制器脚本。与弯曲刚性物理系统以满足您的需求相比,将实体部分置于物理之外会容易得多 @Kamalen 谢谢!我会考虑的 【参考方案1】:

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

假设您的玩家的速度为 10,您希望玩家自行停止移动,因为这是自然的。

您想要做的是从玩家的每帧速度中减去一个量,例如

player.velocity.x *= 0.9f;

这会将玩家的 x 速度设置为其原始速度的 90%。每一帧都这样做,很快你的播放器就会自行停止。

如果上述方法没有产生你想要的效果,你总是可以从玩家的速度中减去一个任意值(当然你必须考虑玩家的速度是否为负):

player.vel.x -= 1;

如果需要,上述两种方法都可以考虑摩擦,只需将百分比或任意值乘以摩擦系数加减一点即可满足您的需求。

【讨论】:

以上是关于由于高摩擦,角色无法移动的主要内容,如果未能解决你的问题,请参考以下文章

如何设置无法踢出具有更高角色的成员 - Discord.js

黑魂复刻游戏的碰撞摩擦问题——Unity随手记

Pygame,角色移动速度

在 iOS 中做一个摩擦屏幕的手势?

C#无法在ASCII控制台游戏中移动角色

我怎样才能让我的角色对角移动?