-3

我想在没有 StartCoroutine 的情况下使用 Vector3.Lerp() 移动精灵。要在脚本中设置起点和目标点。我将精灵拖放到 Unity 编辑器中并运行它。然而,精灵并没有移动。谢谢。

using System.Collections;
using System.Collections.Generic;
using System.Threading;
using UnityEngine;

public class MyScript1 : MonoBehaviour {

public Sprite sprite;

GameObject gameObject;  
SpriteRenderer spriteRenderer;
Vector3 startPosition;
Vector3 targetPosition;

void Awake()
{
    gameObject = new GameObject();
    spriteRenderer = gameObject.AddComponent<SpriteRenderer>();        
}

private void Start()
{
    spriteRenderer.sprite = sprite;
    startPosition  = new Vector3(-300, 100, 0);
    targetPosition = new Vector3(100, 100, 0);        
}
void Update()
{        
    transform.position = Vector3.Lerp(startPosition, targetPosition , Time.deltaTime*2f);
}
}
4

1 回答 1

0

实际上它确实会移动,但只是一点点而且只有一次。

问题出在 lerp 方法本身:将 Time.deltaTime*2f 作为第三个参数传递是错误的。

lerp 方法的第三个参数决定了 startPosition 和 targetPosition 之间的一个点,它应该在 0 和 1 之间。如果传递了 0,它将返回 startPosition,在你的情况下,它返回一个非常接近 startPosition 的点,因为你传递了一个非常小的数字比较到范围 (0..1)

我建议您阅读有关此方法的统一文档

像这样的东西会起作用:

void Update()
{        
    t += Time.deltaTime*2f;
    transform.position = Vector3.Lerp(startPosition, targetPosition , t);
}
于 2017-06-04T10:19:14.060 回答