2015-02-01 4 views
0

У меня есть игровой объект, который движется вперед и порождает сборку каждую секунду или около того. Единственные проблемы в том, что нереста кажется неравномерным, а иногда объекты далеко друг от друга, а иногда они перекрываются. Я могу исправить это, изменив время и расстояние, но когда я протестировал его на ios, он снова сломался.Gameobject, который перемещает и запускает сборные файлы

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

Что я хочу, чтобы сделать это, заставит spawner двигаться вперед и поместить префаб вниз, чтобы сборные плитки не перекрывались. Мне нужно это, чтобы работать на ios. Я думаю, что это может быть нарушен из-за

здесь является порождение сценария:

using UnityEngine; 
using System.Collections; 

public class SpawnScript : MonoBehaviour { 

    public GameObject[] obj; 
    //public float spawnMin = 1; 
    //public float spawnMax = 1; 
    //public float spawnDistance = 0.1f; 
    //private float barDisplay = 3; 
    public float timeLeft = 0.1f; 
    static bool finishTimer = false; //i made this global so you can access from other scripts 
    static bool timerStarted = false; 

    //private GameObject GroundSpawner; 

    // Use this for initialization 
    void Start() { 
     timerStarted = true; 

    } 

    void Update(){ 
     Timer(); 

     transform.Translate(Vector3.forward * 0.1f); 


    } 

    void Timer(){ 

     if (timerStarted == true) {   
      timeLeft -= Time.deltaTime;   
      if (timeLeft <= 0.0f) {   
       Spawn(); 
       timerStarted = false; 
      } 
     } 
    } 

    void Spawn(){ 
     //GroundSpawner = GameObject.Find ("Ground Spawner"); 

     //if (GroundSpawner.transform.position) { 
        //Invoke ("Spawn", Random.Range (spawnMin, spawnMax)); 
        Invoke ("Spawn", 1.75f); 

        Instantiate (obj [Random.Range (0, obj.Length)], transform.position, Quaternion.identity); 

     // } 
    } 
} 

Здесь земля выталкивая других геймобжекты сценария:

using UnityEngine; 
using System.Collections; 

public class GroundHittingSelf : MonoBehaviour { 

    // Use this for initialization 
    void Start() { 

    } 

    // Update is called once per frame 
    void Update() { 

    } 

    void OnCollisionEnter(Collision other) { 
     Debug.Log("Hitting Ground without tag"); 
     if (other.gameObject.tag == "Ground") { 
      //transform.position += new Vector3(0, 0, 0.1f); 
      Debug.Log("Hitting Ground with tag"); 

     } 
    } 
} 
+0

Ну, не мог точно понять, что вы пытаетесь сделать. Можете ли вы опубликовать любое изображение (скриншот) с вашим вопросом? –

ответ

1

Неравных промежутки между конкретизированными префабами исходят из того, что ваш gameObject с SpawnScript движется с изменяющейся скоростью.

Это потому, что вы меняете положение с transform.Translate в пределах Update функции без учета дельтатимы. Update вызывается столько раз в секунду, сколько машина, на которой вы запускаете свой код, может ее вызвать. Например, если машина выполняет некоторую фоновую работу, то Update вызывается реже. В этом случае gameObject будет замедляться. Или еще хуже, если один и тот же код запускается на другой машине, это будет намного быстрее/медленнее.

Это может быть исправлено путем принятия DeltaTime во внимание:

transform.Translate(Vector3.forward * Time.deltaTime * 3.0f); 

DeltaTime, как правило, довольно небольшое количество так постоянные потребности установить вновь. Например, если у вас была хорошая скорость с 30 кадров в секунду, то 3.0f был бы одним, потому что 3.0f * (1.0f/30.0f) = 0.1f

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