Unity SmoothDamp无法正常工作

时间:2015-04-27 08:29:20

标签: unity3d

好的,我得到了一系列卡片,每次用户点击时都会逐一移动到相机中心。

StageContainer是所有卡的父级。这将是一个移动,使它看起来像卡正在移动。

首先,我这是没有smoothdamp的代码

// Update is called once per frame
void Update () {
    if(Input.GetMouseButtonDown(0)){
        StartCoroutine ( ProcessFocus() );
        frames++;
    }
}

IEnumerator ProcessFocus() {
    curPos = StageContainer.transform.localPosition;
    nextPos = curPos;
    nextPosX = nextPos.x - 400;
    nextPos.x = nextPosX;
    StageContainer.transform.localPosition = nextPos;
    yield break;
}

上面的代码让我可以即时更换相机中央的卡片。没有过渡,动画无论如何......关键是它有效。 现在当我改变这个:

StageContainer.transform.localPosition = nextPos;

到此:

float smoothTime = 0.3F;
Vector3 velocity = Vector3.zero;
StageContainer.transform.localPosition = Vector3.SmoothDamp(curPos, nextPos, ref velocity, smoothTime);

我假设它会从当前X点过渡到下一个X点, 但是每当我点击鼠标时,它就会像10~20 X点那样一点一点地移动

我不知道为什么它会那样。请帮忙。

2 个答案:

答案 0 :(得分:0)

那是因为您的代码运行一次然后退出协程。要运行协程一段时间,您必须返回some YieldInstruction个实例。在这种情况下,我怀疑你想要use WaitForEndOfFrame

答案 1 :(得分:0)

你的协程需要继续运行,直到你的动作完成。

IEnumerator ProcessFocus() {

    curPos = StageContainer.transform.localPosition;
    nextPos = curPos;
    nextPosX = nextPos.x - 400;
    nextPos.x = nextPosX;

    float smoothTime = 0.3F;
    Vector3 velocity = Vector3.zero;

    while(this.transform.position != nextPos) {
       StageContainer.transform.localPosition = Vector3.SmoothDamp(curPos, nextPos, ref velocity, smoothTime);
       yield return null;
    }
}