用协程点对点抛物线过去
int FrameRate = 30;//多少帧
float MoveDistance = 2f;//移动多少距离
string MaterialPrefabPath = "Prefabs/Effect_biaoqing_prefab/";
IEnumerator StartMateriaAni(byte index,byte fromViewID,byte toViewID)
{
    Vector3 startPos = poss[fromViewID].position + offsetPos;
    Vector3 toPos = poss[toViewID].position + offsetPos;
    
    //方向 向上减速 向下加速
    bool isDown = false;
    if (startPos.y > toPos.y)
        isDown = true;
        
    float rate = (toPos - startPos).magnitude / MoveDistance;//缩放比例
    int relateFrame = (int) Mathf.Round (FrameRate * rate);//实际帧数/期望帧数 = 实际距离/期望距离
    if (relateFrame < 20)//距离太近可能看起来会太快,所以限制下最低帧数
            relateFrame = 20;
    int allDuan = (1 + relateFrame) * relateFrame / 2; // 1 + 2 + ...+ realteFrame
    float tweenPosY = (toPos.y - startPos.y) / allDuan;//Y轴减速度或加速度
    float tweenPosX = (toPos.x - startPos.x) / relateFrame;//X轴恒速

    //实例化1
    Transform tran1 = GetEffectInPool(index,1).transform;
    InitEffect(tran1, startPos);
    //计算旋转
    tran1.rotation = Quaternion.FromToRotation(Vector3.up, (toPos - startPos).normalized); ;
    for (int i = 0; i < relateFrame; i++)
    {
        //x方向恒速,y方向先快后慢或先慢后快,效果承抛物线
        if(isDown)
            tran1.position += new Vector3(tweenPosX, tweenPosY * (i + 1), 0);
        else
            tran1.position += new Vector3(tweenPosX, tweenPosY  * (relateFrame - i),0) ;
        tran1.rotation = Quaternion.FromToRotation(Vector3.up, (tran1.position - startPos));
        yield return new WaitForEndOfFrame();
    }
    InEffectInPool(tran1.gameObject);//回收

    //实例化2
    Transform tran2 = GetEffectInPool(index, 2).transform; ;
    InitEffect(tran2, toPos);
    switch (index)//针对动作延迟播放shengyin
    {
        case 1:
            yield return new WaitForSeconds(0.5f);
            break;
    }
    NGUITools.PlaySound(musics[index - 1]);

    yield return new WaitForSeconds(3f);
    InEffectInPool(tran2.gameObject);
}


想法就是,利用期望帧数和期望距离和实际距离来计算出实际的帧数,这样可以接近一种恒速(不确定)。避免了用if判断位置到目标位置的不精确性。利用这种目标和起始的位置来分段,在固定的帧内移动到目标位置,在Y方向时分端可以分多一点,开始的时候移动多段随后减少就可以制造一种减速度的感觉 或者是 开始移动少段随后变多制造出加速的感觉。


首页 我的博客
粤ICP备17103704号