2015-01-28 2 views
0

Итак, я уже опубликовал много вопросов об этом проекте, но у меня возникла другая проблема. Я создал gameObject, который блуждает вокруг, как должен, однако он телепортируется в новое место, а не медленно скользит туда, как должен.Вражеский телепортация

Это код для перемещения:

if(directionGenerator == 1){ //up 
      enemy.transform.Translate(new Vector2(0, totalWalkDistanceUp) * wanderSpeed * Time.deltaTime); 
      Debug.Log ("Direction generated: up"); 
     } 
     else if(directionGenerator == 2){ //down 
      enemy.transform.Translate(new Vector2(0, totalWalkDistanceDown) * wanderSpeed * Time.deltaTime); 
      Debug.Log ("Direction generated: down"); 
     } 
     else if(directionGenerator == 3){ //left 
      enemy.transform.Translate (new Vector2(totalWalkDistanceLeft, 0) * wanderSpeed * Time.deltaTime); 
      Debug.Log ("Direction generated: left"); 
     } 
     else if(directionGenerator == 4){ //right 
      enemy.transform.Translate(new Vector2(totalWalkDistanceRight,0) * wanderSpeed * Time.deltaTime); 
      Debug.Log ("Direction generated: right"); 
     } 

Это весь код:

using UnityEngine; 
using System.Collections; 

public class EnemyAI : MonoBehaviour { 
    private void Start(){ 
     findPosition(); 
    } 
    private void walkRepeat(){ 
     InvokeRepeating("enemyWalk", 3, 5f); 
     //enemyWalk(); 
    } 


    //Variables 
    public Transform enemy; 

    private Vector2 position; 

    /* not necessary 
    private float maxPosX; 
    private float maxPosY; 
    private float maxNegX; 
    private float maxNegY; 
    */ 

    public float wanderSpeed = 3; 

    private float totalWalkDistanceUp; 
    private float totalWalkDistanceDown; 
    private float totalWalkDistanceLeft; 
    private float totalWalkDistanceRight; 




    private void findPosition(){ 
     position.x = enemy.position.x; 
     position.y = enemy.position.y; 

     /* not neccessary 
     maxPosX = position.x + 5; 
     maxNegX = position.x - 5; 
     maxPosY = position.y + 5; 
     maxNegY = position.y -5; 
     */ 

     Debug.Log ("Enemy position: " + position); 
     //Debug.Log ("Max positive 'x' position: " + maxPosX + ". Max positive 'y' position: " + maxPosY + ". Max negative 'x' position: " + maxNegX + ". Max negative 'y' position: " + maxNegY); 
     Debug.Log ("Finished!"); 

     walkRepeat(); 
    } 

    private void enemyWalk(){ 
     //Distance Generator 
     float walkDistance = Random.Range (40f, 70f); 
     totalWalkDistanceUp = walkDistance + position.y; 
     totalWalkDistanceDown = position.y - walkDistance; 
     totalWalkDistanceRight = walkDistance + position.x; 
     totalWalkDistanceLeft = position.x - walkDistance; 
     Debug.Log ("Distance generated up: " + totalWalkDistanceUp + ". Distance generated down: " + totalWalkDistanceDown + ". Distance generated left: " + totalWalkDistanceLeft + ". Distance generated right: " + totalWalkDistanceRight); 

     //Direction generator 
     int directionGenerator = Random.Range (1, 4); 

     if(directionGenerator == 1){ //up 
      enemy.transform.Translate(new Vector2(0, totalWalkDistanceUp) * wanderSpeed * Time.deltaTime); 
      Debug.Log ("Direction generated: up"); 
     } 
     else if(directionGenerator == 2){ //down 
      enemy.transform.Translate(new Vector2(0, totalWalkDistanceDown) * wanderSpeed * Time.deltaTime); 
      Debug.Log ("Direction generated: down"); 
     } 
     else if(directionGenerator == 3){ //left 
      enemy.transform.Translate (new Vector2(totalWalkDistanceLeft, 0) * wanderSpeed * Time.deltaTime); 
      Debug.Log ("Direction generated: left"); 
     } 
     else if(directionGenerator == 4){ //right 
      enemy.transform.Translate(new Vector2(totalWalkDistanceRight,0) * wanderSpeed * Time.deltaTime); 
      Debug.Log ("Direction generated: right"); 
     } 
    } 

} 

Я не знаю, почему он держит телепортации на новое место и не сползать. Я уверен, что это что-то простое, но спасибо за предоставленную помощь.

ответ

1

InvokeRepeating на самом деле не подходит для этого. Вот почему это выглядит как телепортирование ...
Если вы хотите обновить свою позицию, вы должны использовать Update(), или если вам нужно движение на основе психики, вам необходимо использовать FixedUpdate() ... Возможно, вы могли бы обойти свой нынешний подход и используя Lerp для интерполирования между значениями, но, по моему мнению, это будет странно реальным ...

+0

'FixedUpdate()' работает, но это заставляет персонажа перемещаться очень быстро, есть ли способ замедлить 'FixedUpdate() 'поэтому персонаж не волнуется? – Jeff

+0

Нет, FixedUpdate происходит в фиксированном интервале (отсюда и название). Измените свои переменные (особенно wanderSpeed). – walther

+0

Я понял, что вы можете замедлить его (Edit -> Project Settings -> Time, а затем уменьшить время Fixed Timestep), но когда я замедлил его, я увидел, что персонаж по-прежнему телепортировался, а не скользя. – Jeff

Смежные вопросы