我在Unity游戏中需要一些数学方面的帮助。这是概念: 球使用正弦函数上下移动(蓝线)。在任何时刻玩家都可能想要按空格键并根据红线改变球的方向。例如,我选择了pi / 4。
因此,我认为改变应该是顺利的,没有不自然的跳跃。
简介:
这是我的班级:
public class GoForward : MonoBehaviour
{
public float speed = 0.1f; // speed of forward motion
public float amplitude = 5f; // strength of vertical motion
public float frequency = 5f; // width of spikes of vertical motion
// Update is called once per frame
void Update ()
{
float phase = 0f; // phase displacement
if (Input.GetKeyDown (KeyCode.Space))
{
// find phase displacement here
}
// apply new position to the ball
float xpos = transform.position.x + speed * Time.deltaTime;
float ypos = amplitude * Mathf.Sin (frequency * Time.time + phase);
transform.position = new Vector3 (xpos, ypos, transform.position.z);
}
}
当然,我认为解决方案最简单,但我的思想无法集中精力。 所以我需要你的帮助,伙计。
我需要在任何时刻找到相位偏移,这样我的所有条件都必须保持。
谢谢!
找到解决方案。非常感谢大家的帮助!
答案 0 :(得分:2)
对于上半个阶段的给定时间Time.time
,到正弦最大值的距离为
dist = Pi/2 - frequency * Time.time
你需要将曲线偏移两倍的距离(上坡,然后下降相同的量)。所以你需要:
if (Input.GetKeyDown (KeyCode.Space))
{
phase = Pi - 2 * frequency * Time.time - oldPhase;
}
这也适用于后半阶段。