我在一个统一场景中有两个位置,我想要一个球体游戏对象在它们之间移动。这对于向命令移动很容易,但我希望发生的是球在离开一个球时加速,然后在一个受控曲线中接近下一个球时减速。我需要它在庄园中的两个位置之间密切配合,类似于一个正在滚动的球。
有人告诉我,我可以用一个sin波来做这件事,但是我不确定怎么做。有没有简单的方法可以做到这一点?
发布于 2014-07-02 05:40:17
前言
有许多方法可以解决您的问题,而不仅仅是使用正弦函数。
正弦函数示例
下面是一个例子:
public float frequency = 1.0f; // in Hz
public Vector3 positionA;
public Vector3 positionB;
private float elapsedTime = 0.0f;
public void Update()
{
elapsedTime += Time.deltaTime;
float cosineValue = Mathf.Cos(2.0f * Mathf.PI * frequency * elapsedTime);
transform.position = positionA + (positionB - positionA) * 0.5f * (1 - cosineValue);
}为了方便起见,这里使用余弦而不是正弦。
发布于 2016-03-01 20:14:35
我面临着几乎同样的任务。我的对象被放置在随机的位置,其中两个对象之间的线不平行于轴。因此,我创建了通用的解决方案,可以帮助任何人。
这是Github上的demo video源代码。
脚本本身非常简单。我们所要做的就是计算两个向量--主方向向量和正交向量。在此之后,我们需要用正弦函数来从属正交向量,然后将这两个向量相加,这样和就会沿着精确的正弦曲线移动物体。
void FixedUpdate () {
float t = Time.time - startTime;
rb.velocity = direction * speed + orthogonal * amplitude * Mathf.Sin (frequency * t);
}你可以找到更多的details here -如何设置场景,组件等。
https://stackoverflow.com/questions/24493395
复制相似问题