由于高摩擦,角色无法移动
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;
如果需要,上述两种方法都可以考虑摩擦,只需将百分比或任意值乘以摩擦系数加减一点即可满足您的需求。
【讨论】:
以上是关于由于高摩擦,角色无法移动的主要内容,如果未能解决你的问题,请参考以下文章