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);
}
Другие вопросы по тегам