我有PhysicMaterial2D
用于地面和我的性格麻烦。当字符不动,它的工作原理,因为我需要(这两种材料具有friction = 1.0
)。但由于高摩擦系数的角色不能移动。
当然,我可以用更多的力(AddForce()
)移动的字符,但然后它会过于迅速转移使用其他材料的其他理由。
这是如何的问题在其他游戏(即多平台游戏)解决了吗?我应该设置人物的材料的摩擦,零在移动时(我没有其他想法)?或有更漂亮的解决方案吗?
附:我与摩擦也更高价值的测试,但它导致了开始在移动旋转的字符。
添加
我试图设置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);
}
而不是使用摩擦,可以抑制玩家的运动。
假设你的球员有10的速度,你希望玩家停止它自己的协议的移动,因为这是很自然的。
什么,你会想要做的就是从您的播放器的速度每一帧例如减去量
player.velocity.x *= 0.9f;
这将玩家的X速度设置为它的原始速度的90%。该做的每一帧,很快你的播放器会自动停止所有。
如果上面的方法不会产生你想要的效果,你可以永远只是减去从玩家的速度任意值(当然,你必须考虑,如果玩家的速度是负的):
player.vel.x -= 1;
上述两种方法可以在摩擦系数,如果需要的话,简单地乘以摩擦系数加上或减去一个位的百分比或任意值,以满足您的需求。