Заменить transform.position
на instance.transform.position
в
instance.transform.position = Vector3.MoveTowards
(transform.position, PointCopy.transform.position, 5f * Time.deltaTime);
То, что вы делаете, использует transform
из SpawntoLerp
, так что вы никогда не будете двигаться дальше от этой позиции, тогда 5f * Time.deltaTime
.
Вместо этого вы хотите перейти от текущей позиции instance
instance.transform.position = Vector3.MoveTowards
(instance.transform.position, PointCopy.transform.position, 5f * Time.deltaTime);
И тогда вы могли бы снова использовать простой public Transform
как
public class SpawntoLerp : MonoBehaviour
{
// you can use any Component as field
// and Unity will automatically take the according reference
// from the GameObject you drag in
public Transform CubePrefab;
public Transform instance;
// Do not call it transform as this property already exists in MonoBehaviour
public Transform PointCopy;
private void Start()
{
// instantiate automatically returns the same type
// as the given prefab
instance = Instantiate(CubePrefab, transform.position, transform.rotation);
}
private void Update()
{
instance.position = Vector3.MoveTowards(instance.position, PointCopy.position, 5f * Time.deltaTime);
}
}
Лучшим решением относительно эффективности было бы использование Coroutine вместо этого, потому что вы больше не хотите двигаться после достижения позиции:
public class SpawntoLerp : MonoBehaviour
{
public Transform CubePrefab;
public Transform PointCopy;
private void Start()
{
StartCoroutine(SpawnAndMove(CubePrefab, PointCopy.position));
}
private IEnumerator SpawnAndMove(GameObject prefab, Vector3 targetPosition)
{
Transform instance = Instantiate(CubePrefab, transform.position, transform.rotation);
while(Vector3.Distance(instance.position, targetPosition) > 0)
{
instance.position = Vector3.MoveTowards(instance.position, targetPosition, 5f * Time.deltaTime);
// "Pause" the routine, render this frame and
// continue from here in the next frame
yield return null;
}
}
}