C# Unity:如何使用Vector3.Lerp()进行精灵移动而不使用Start例程

C# Unity:如何使用Vector3.Lerp()进行精灵移动而不使用Start例程,c#,unity3d,sprite,translation,lerp,C#,Unity3d,Sprite,Translation,Lerp,我想使用Vector3.Lerp()移动一个精灵,而不使用start例程。 要在脚本中设置的起点和目标点。 我将精灵拖放到Unity编辑器中并运行它。 但是,精灵不会移动。谢谢 using System.Collections; using System.Collections.Generic; using System.Threading; using UnityEngine; public class MyScript1 : MonoBehaviour { public Sprite s

我想使用Vector3.Lerp()移动一个精灵,而不使用start例程。 要在脚本中设置的起点和目标点。 我将精灵拖放到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);
}
}
使用系统集合;
使用System.Collections.Generic;
使用系统线程;
使用UnityEngine;
公共类MyScript1:单行为{
公共雪碧;
游戏对象游戏对象;
喷洒器;
矢量3起始位置;
矢量3目标位置;
无效唤醒()
{
gameObject=新gameObject();
spriteender=gameObject.AddComponent();
}
私有void Start()
{
spriteRenderer.sprite=精灵;
起始位置=新矢量3(-300100,0);
targetPosition=新矢量3(100,100,0);
}
无效更新()
{        
transform.position=Vector3.Lerp(起始位置、目标位置、时间、增量时间*2f);
}
}

实际上,它确实会移动,但只移动一次

问题在于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);
}

这个问题已经标记为重复,再次发布不会有任何区别。哪个部分是相同的。你在开玩笑吗?@Lestat你能把dup链接起来吗?答案可能是重复的。有些人只是认为所有的问题都是一样的,而没有给予任何支持。