Преобразование игрового объекта

Я пытаюсь заставить объект перемещаться в куб, который хранится в массиве.

Массив заполнен игровыми объектами с тегом.

Я могу заставить Объект мгновенно двигаться к кубу, но не медленно, как он идет к нему.

Это мой сценарий:

var moveTo : GameObject;

function Update(){
    print(FindClosestEnemy().name);
}

function FindClosestEnemy():GameObject{

    var chasePoints : GameObject[];
    chasePoints = GameObject.FindGameObjectsWithTag("chasePoint");
    var closest : GameObject;
    var distance = Mathf.Infinity;
    var position = transform.position;

    for(var go: GameObject in chasePoints){
        var diff = (go.transform.position-position);
        var curDistance = diff.sqrMagnitude;
        if(curDistance < distance){
            closest = go;
            moveTo = closest;
            transform.position -= moveTo.transform.position;
            distance = curDistance;
        }
    }
    return closest; 
}

Я также пробовал Time.deltaTime, но тогда он телепортировался далеко от куба.

И просто преобразовать его в Transform Array тоже не получится :( Есть идеи, как заставить это работать?

Помощь очень ценится :) Заранее спасибо!


person Amacoder    schedule 02.04.2011    source источник


Ответы (2)


Похоже, вы делаете всю трансформацию в одном кадре. Вам нужно выбрать скорость и применить ее к объекту для каждого кадра. Вы знаете от и до. Выберите, сколько времени вы хотите, чтобы это заняло, и обновляйте его постепенно. Помните, что вы не можете быть уверены, что будет 60 кадров в секунду, поэтому примите это во внимание.

person Andrew T Finnell    schedule 02.04.2011

Вы можете использовать Vector3.MoveTowards

Для maxDistanceDelta вы выбираете скорость и умножаете ее на Time.deltaTime, чтобы она не зависела от длины кадра:

Vector3.MoveTowards(transform.position, moveTo.transform.position, speed * Time.deltaTime);
person marsbear    schedule 27.05.2011