Unity: как заставить двигаться спрайт с помощью Vector3.Lerp() без StartCoroutine
Я хочу переместить спрайт с помощью Vector3.Lerp() без StartCoroutine. Стартовые и целевые точки хотят установить в скрипте. Я перетаскиваю спрайт в Unity Editor и запускаю его. Однако спрайт не двигается. Благодарю.
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);
}
}
1 ответ
На самом деле он движется, но только немного и только один раз.
Проблема в самом методе lerp: передача Time.deltaTime*2f в качестве третьего параметра неверна.
Третий параметр метода lerp определяет точку между startPosition и targetPosition, и она должна быть между 0 и 1. Она возвращает startPosition, если передается 0, и в вашем случае она возвращает точку очень очень близко к startPosition, поскольку вы передали очень небольшое число по сравнению в диапазон (0..1)
Я предлагаю вам прочитать документы об этом методе.
Примерно так будет работать:
void Update()
{
t += Time.deltaTime*2f;
transform.position = Vector3.Lerp(startPosition, targetPosition , t);
}