2017-06-04 49 views
-3

我想使用Vector3.Lerp()而不使用StartCoroutine移动精灵。 开始和目标点要在脚本中设置。 我拖动&将精灵放入Unity编辑器并运行它。 但是,精灵不会移动。谢谢。Unity:如何使用Vector3.Lerp()在不使用StartCoroutine的情况下移动精灵

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); 
} 
} 
+0

这个问题已经被标记为重复,再张贴不会有任何区别.. – Lestat

+0

哪一部分是相同的。你在跟我开玩笑吗? – user1232250

+0

@Lestat你可以链接dup吗? –

回答

0

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

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

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

我建议你阅读unity docs about this method

像这样将工作:

void Update() 
{   
    t += Time.deltaTime*2f; 
    transform.position = Vector3.Lerp(startPosition, targetPosition , t); 
} 
+0

这是一个答案。有些人只是认为所有的问题都是一样的,没有任何不妥。 – user1232250

相关问题