如何从中间点启动Vector3.Lerp?

时间:2019-05-01 13:16:52

标签: unity3d lerp

我必须将对象从-10移动到+10 x位置。但是我想从零x.point开始移动我的对象,如何在中间位置开始lerp?

Edit2:对象应从x = 0的位置开始,移至+10 x的位置,然后移至-10 x的位置,再移至+10 x,-10 x,就像一个循环。

Vector3 pos1, pos2, pos0, pos3;
void Start()
{
    pos0 = transform.position;

    pos1 = pos0 + new Vector3(10, 0, 0);

    pos2 = pos0 - new Vector3(10, 0, 0);

    pos3 = pos1;
}
float time = 0.5f;
void FixedUpdate()
{ 
    time += Mathf.PingPong(Time.time * 0.5f, 1.0f);
    transform.position = Vector3.Lerp(pos2, pos1, time);
}

2 个答案:

答案 0 :(得分:2)

摘自https://docs.unity3d.com/ScriptReference/Vector3.Lerp.html上的Unity API文档

public static Vector3 Lerp(Vector3 a, Vector3 b, float t);
  

当t = 0时返回a。当t = 1时返回b。当t = 0.5时返回   在a和b之间的中间点。

在x = 0恰好在起点和终点之间的这种对称情况下,您可以使用lerp,并且t从t = 0.5开始。也许是这样的:

Vector3 pos1, pos2, pos0, pos3;

private float t;

void Start()
{
    pos0 = transform.position;
    pos1 = pos0 + new Vector3(10, 0, 0);
    pos2 = pos0 - new Vector3(10, 0, 0);
    pos3 = pos1;

    t = 0.5
}

void FixedUpdate()
{ 
    t += Mathf.PingPong(Time.deltaTime * 0.5f, 1.0f);
    transform.position = Vector3.Lerp(pos2, pos1, t);
}

@BugFinder指出,您可能应该使用Time.deltaTime而不是Time.time

答案 1 :(得分:0)

这是我的处理方式:

 select
        //removed
    from
        Entity1  subscripti0_ 
    **left outer join**
        Entity2 emailalert1_ 
            on subscripti0_.id_alert=emailalert1_.iid_alert
    where
        emailalert1_.id_user=?