使用Coroutine随时间推移统一移动物体不会精确移动物体

时间:2017-03-31 10:45:58

标签: c# unity3d coroutine

我有一个边框来判断选择了哪个角色,我想在用户点击特定角色头像时移动它,我认为做一个平滑移动的选择边框将是整洁的效果。这是看起来像:

enter image description here

所以我使用以下脚本来移动虚线边框

public class SelectCharacter : MonoBehaviour, IInputBehavior {

    [SerializeField]
    private Character character;


    private IEnumerator moveLocalPosOverSeconds(GameObject obj,  Vector3 end, float seconds)
    {
        float elapsedTime = 0;
        Vector3 start = obj.transform.localPosition;
        while(elapsedTime < seconds)
        {
            obj.transform.localPosition = Vector3.Lerp(start, end, (elapsedTime / seconds));
            elapsedTime += Time.deltaTime;
            yield return new WaitForEndOfFrame();
        }
        // hope this will ajust the dashed box to precise postion
        transform.localPosition = end; 
    }

    public void OnClick()
    {
        GameObject selectBorder = transform.parent.Find("SelectBorder").gameObject;
        Vector3 newLocalPos = new Vector3(transform.localPosition.x, selectBorder.transform.localPosition.y, selectBorder.transform.localPosition.z);
        Debug.Log("localPos is :" + newLocalPos);
        StartCoroutine(moveLocalPosOverSeconds(selectBorder, newLocalPos, 0.2f));
        SceneController.instance.ChangeCharacterTo(character);

    }
}

似乎边界的位置不会达到所需的精确位置,我知道随着时间的推移Lerp可能会出现一些精确的位置,因此添加transform.localPosition = end;以保持调整while块之后的位置。但它不会起作用。

我仔细检查控制台的日志和检查员中虚线框的位置,它只是不会在准确的位置结束。

有一段时间会发生这种情况:

enter image description here

如果我好运,这似乎很好:

enter image description here

但在检查员:

enter image description here

x值应精确为0.9而不是0.88 ......

我做错了什么?

0 个答案:

没有答案