我有一个我正在以圆形移动的立方体(带水平键输入)低于建议的代码。
public class Oscillator : MonoBehaviour {
float timeCounter = 0;
float speed,width, height;
public float yPosition = 30;
// Use this for initialization
void Start () {
speed = 2; width = 10; height = 10;
}
// Update is called once per frame
void Update () {
timeCounter += Time.deltaTime * speed * Input.GetAxis("Horizontal");
float x = Mathf.Sin (timeCounter)* height;
float y = yPosition;
float z = Mathf.Cos (timeCounter) * width;
transform.position = new Vector3 (x, y, z);
}
}
现在我的物体正在以圆形移动,这很好。现在我想将我的物体运动转化为时间。 让我们假设
如果我的对象x位置是1那么它应该给我时间1.0
如果它是1.5那么它应该给我1.5
根据我对象的x位置(或可能是z)增加或减少。
我记录了我的对象的x位置,该位置从0到9.999开始然后变为减0,然后变为-1到-9然后变为减小0并且到达其初始位置。这个圆形运动x值对我来说很奇怪,我无法形成任何可以将我的x位置转换为时间的公式。 请问这个纯粹的数学和三维数学问题可以帮助我吗?
答案 0 :(得分:0)
您可以尝试以下方法:
获取圆的原点和圆的0之间的向量,如时钟上的12。这个是不变的。
然后你有圆的原点和当前点之间的向量。
尝试以下方法:
Vector3 from = new Vector3(0,0,1); / This is your 12
Vector3 to = GetCurrentVector();
float angle = Quaternion.FromToRotation(Vector3.up, to - from).eulerAngles.z;
Debug.Log(angle / 360f);