【发布时间】: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 谢谢!我会考虑的
标签: c# unity3d game-physics unity3d-2dtools