我正在用C#在Unity中创建一个小型游戏,不允许使用任何内置的物理或对撞机。我所拥有的是一个上面有重量对象的平台。使用箭头键可以倾斜平台角度。然后,顶部的重量应相应于给定的倾斜角做出反应。我已经计算出了所有的摩擦力,最大摩擦力,法向力a.s.o.无效的是,当您按一个键来更改倾斜度时,作用在对象上的力应该相应地改变,如果作用在配重上的力大于最大摩擦力,则配重应该移动。这是我的代码的简化示例。
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转换为弧度有关,但是我尝试使用(180.0 / Math.PI)
将reg转换为deg。我可以在计算器上使用所有功能,但不能在代码中使用。
答案 0 :(得分:2)
这是不正确的:
N = m * g * µ * (Math.Cos(deg) * (180.0 / Math.PI));
如果角度为度,则必须将其转换为弧度并通过余弦函数:
double rad = deg*Math.PI/180.0;
N = m*g*mu*Math.Cos(rad);
答案 1 :(得分:1)
使用Mathf.Deg2Rad和Mathf.Rad2Deg常数,您可以轻松地将弧度转换为度,也可以轻松地将度转换为弧度。
using UnityEngine;
public class Example : MonoBehaviour
{
// convert 1 radian to degrees
float rad = 10.0f;
void Start()
{
float deg = rad * Mathf.Rad2Deg;
Debug.Log(rad + " radians are equal to " + deg + " degrees.");
}
}
答案 2 :(得分:0)
有一个超级方便的函数,称为Mathf.Rad2Deg和Mathf.Deg2Rad。他们将弧度转换为度,并将度转换为弧度。