Трансформирайте GameObject

Опитвам се да накарам обект да се премести в куб, който се съхранява в масив.

Масивът е пълен с gameObjects с етикет.

Мога да накарам обекта да се придвижи мигновено към куба, но не бавно, както върви към него.

Това е моят скрипт:

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