unity3d 移向原始位置

dgiusagp  于 2022-11-15  发布在  其他
关注(0)|答案(1)|浏览(200)

我想在开始时保存cursor的初始位置,在移动cursor并释放鼠标按钮后,它应该返回到其原始位置(使用10f * Time.deltaTime),但这不起作用

[SerializeField] private Transform cursor;
private Vector3 OriginalPosition;

void Start()
{
    OriginalPosition = cursor.transform.position;
    Debug.Log(OriginalPosition);
}

void OnMouseUp()
{
    Debug.Log("MouseUp");
    cursor.transform.position = Vector3.MoveTowards(cursor.position, OriginalPosition, 10f * Time.deltaTime);
}
jm81lzqq

jm81lzqq1#

问题是,您假设调用MoveForward将使游戏对象一直回到原始位置,但这不会发生,您实际上是在对光标说“当我释放鼠标按钮时,计算我的当前位置和原始位置之间的方向,并且以每秒10个单位的速度移动它在1帧中的量”。你需要做的是在N帧的时间内进行MoveToward操作,为了实现这一点,你需要使用一个协程,所以遵循类似的代码

public Transform cursor;
public Transform originalPosition;

public void Move()
{
    StartCoroutine(MoveToTargetPosition());
    
    IEnumerator MoveToTargetPosition()
    {
        while (Vector3.Distance(cursor.position, originalPosition.position) >= .5f)
        {
            yield return null;

            cursor.position = Vector3.MoveTowards(cursor.position, originalPosition.position, 10f * Time.deltaTime);
        }
    }
}

希望这对

相关问题