【发布时间】:2020-04-09 21:47:35
【问题描述】:
我正在使用 C# 在 Unity 中创建一个小游戏,我不允许使用任何内置的物理或碰撞器。我所拥有的是一个平台,上面有一个重量物体。使用箭头键,您可以倾斜平台角度。然后顶部的重量应该对给定的倾斜角度做出相应的反应。我用摩擦力、最大摩擦力、法向力等计算了一切。不起作用的是当你按下一个键来改变倾斜度时,物体上的力应该相应地改变,如果重物上的力大于最大摩擦力,那么重物应该移动。这是我的代码的简化示例。
public float m = 35;
public float µ = 0.15f;
public float g = 9.82f; //(N/kg)
public float N;
public double deg = 0;
Fmax = m * g * µ;
if (Input.GetKeyDown(KeyCode.UpArrow)) {
deg++;
N = m * g * µ * (Math.Cos(deg) * (180.0 / Math.PI));
platform.transform.Rotate(0, 0, deg, Space.Self);
} else if (Input.GetKeyDown(KeyCode.DownArrow)) {
deg--;
N = m * g * µ * (Math.Cos(deg) * (180.0 / Math.PI));
platform.transform.Rotate(0, 0, deg, Space.Self);
}
if(N > Fmax) {
// Do the rest of the code
}
我认为问题与 Math.Cos(deg) 将 deg 转换为弧度有关,但我随后尝试将 reg 转换回 deg 为:(180.0 / Math.PI)。我可以让一切都在我的计算器上工作,但不能在代码中工作。
【问题讨论】:
-
你的意思是 rad(ians) 到 deg(rees) 吗?不确定
reg是什么。如果您的意思是弧度,那么 Unity 会在Mathf库中对该内置进行转换。Mathf.Rad2Deg和Mathf.Deg2Raddocs.unity3d.com/ScriptReference/Mathf.Rad2Deg.html docs.unity3d.com/ScriptReference/Mathf.Deg2Rad.html -
是的对不起我的意思是弧度到度数
-
你需要
Math.Cos(deg * Math.PI / 180)。 Math.Cos 采用弧度表示参数。 -
我建议只对浮点数使用
double。你从float得到的唯一东西就是这种情况下的问题。参考:Float vs Double Performance. -
@Krullmizter 它与 Remy_rm 已经建议的完全相同:
Mathf.Cos(deg * Mathf.Deg2Rad)因为它返回的结果与Math.PI / 180完全相同。注意通用c#库Math和Unity内置Mathf是有区别的!
标签: c# unity3d math game-physics physics