unity3D 使用携程对按钮进行位移之后,却在yield return 后立刻被还原

在携程中对按钮进行Z方向上的位移,但是在yield return waitforseconds之后所做的位移被还原了,也就是说在每一次yield return waitforseconds之后按钮的位置自动还原到按钮的初始位置
上图

第一张图片是进行到yield return之前的位置

img

第二张图片是yield return 进行完毕后的位置
img
waitforseconds等待时间内进行的fixedupdate操作并未改变按钮的位置
请帮帮忙

我的源码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;

public class Shake : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
{
public GameObject target;//需要挂载的目标
float shakeTime = 1.0f;//抖动总时间
float shakeDeratime = 0.01f;//每次抖的间隔时间
float shakeRate = 0.1f;//抖动幅度
bool isDowning = false;//是否点击
bool isIEworking = false;//携程是否正在工作
float startTime;
float maxTime = 1.0f;
int direction = 1;
Coroutine c = null;
float nowZ;
// Start is called before the first frame update
void Start()
{

    target = this.gameObject;

}
public IEnumerator IEShake()
{
    float rate = shakeRate;
    nowZ =  target.transform.position.z;

    for (float i = 0; i < shakeTime; i += shakeDeratime)
    { 
        if (!isDowning)
        {
            break;
        }
        target = this.gameObject;
        target.transform.position = new Vector3(target.transform.position.x, target.transform.position.y, 0) + rate * Vector3.forward * 20;
        if (System.Math.Abs(rate) < 1)
        {
            rate = rate + shakeRate * direction;
        }
        else
        {
            direction = -direction;
            rate = rate + shakeRate * direction;
        }
        //到yield会自动清零z坐标
        yield return  new WaitForSeconds(shakeDeratime);
    }
    target.transform.position = new Vector3(target.transform.position.x, target.transform.position.y, nowZ);
    isIEworking = false;
}
private void FixedUpdate()
{
    target = this.gameObject;
    if (isDowning)
    {
        if (Time.time - startTime >= maxTime && !isIEworking)
        {
            isIEworking = true;
            c = StartCoroutine(IEShake());
        }
    }
    if (!isDowning && c != null)
    {
        StopCoroutine(c);
        target.transform.position = new Vector3(target.transform.position.x, target.transform.position.y, nowZ);
        isIEworking = false;
    }

}

public void OnPointerDown(PointerEventData eventData)
{
    isDowning = true;
    startTime = Time.time;
}
public void OnPointerUp(PointerEventData eventData)
{
    isDowning = false;
    startTime = Time.time;
}

}

img
我拿你的代码验证了一下,并没有你说的问题,日志显示是从0-20-0的过程

你debug一下你new的这个vector3
img