我对PhysicMaterial2D
的背景和性格感到困扰。当角色不动时,它会按我的需要工作(两种材料都有friction = 1.0
)。但是由于摩擦值高,角色无法移动。
当然,我可以使用更大的力量(AddForce()
)移动角色,但由于使用其他材料的其他原因,它会过快移动。
在其他游戏(例如许多平台游戏)中如何解决此问题?我应该在角色移动时将其材质的摩擦设置为零(我没有其他想法)吗?还是有更漂亮的解决方案?
P.S。我也用较高的摩擦力进行了测试,但是这导致角色在移动中开始旋转。
添加
我尝试将boxCollider.sharedMaterial.friction = 0.0f
设置在机芯上,并在用户释放按钮 BUT 后返回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);
}
答案 0 :(得分:0)
您可以减少玩家的运动,而不必使用摩擦。
假设您的播放器的速度为10,您希望播放器自行停止移动,因为那是自然的事情。
您想要做的是每帧例如从玩家的速度中减去一个量
player.velocity.x *= 0.9f;
这会将玩家的x速度设置为其原始速度的90%。每帧都执行一次,很快您的播放器将自行停止。
如果上述方法不能产生您想要的效果,则始终可以从演奏者的速度中减去一个任意值(当然,如果演奏者的速度为负,则必须考虑该值):
player.vel.x -= 1;
如果需要,上述两种方法都可以考虑摩擦,只需将百分比或任意值乘以摩擦系数加或减一点即可满足您的需求。