Операции с объектами, имеющими общий тег

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Операции с объектами, имеющими общий тег

Сообщение Lothar de la Periere 28 янв 2020, 19:07

Всем доброго времени суток!

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

NullReferenceException: Object reference not set to an instance of an object
CornMoving.FixedUpdate ()

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

Вот скрипт:

Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CornMoving : MonoBehaviour
{

    GameObject Corn;
    public float Speed;
    public Vector3 CornMoveDirection;

    void FixedUpdate()
    {

        Corn = GameObject.FindWithTag("Corn");

        Corn.transform.Translate(CornMoveDirection.normalized * Speed);
    }
}
 


Заранее спасибо всем неравнодушным!
Аватара пользователя
Lothar de la Periere
UNец
 
Сообщения: 3
Зарегистрирован: 28 янв 2020, 18:44

Re: Операции с объектами, имеющими общий тег

Сообщение 1max1 28 янв 2020, 19:19

Ты не тот скрипт дал, давай сюда тот, который генерирует объекты, ибо в нем тебе нужно заполнять очередь и двигать объекты там же.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Операции с объектами, имеющими общий тег

Сообщение Lothar de la Periere 28 янв 2020, 19:34

1max1 писал(а):Ты не тот скрипт дал, давай сюда тот, который генерирует объекты, ибо в нем тебе нужно заполнять очередь и двигать объекты там же.


С тем скриптом все ОК вроде...
Вот, смотри:

Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CornSpawning : MonoBehaviour
{
    public Vector3 CornSpawnPoint;
    public GameObject Ear;
    public float SpawnTime;

    void Start ()
    {
        InvokeRepeating("Spawn", 0, SpawnTime);
    }

    void Spawn()
    {
        Instantiate(Ear, CornSpawnPoint, Ear.transform.rotation);
    }
}
Аватара пользователя
Lothar de la Periere
UNец
 
Сообщения: 3
Зарегистрирован: 28 янв 2020, 18:44

Re: Операции с объектами, имеющими общий тег

Сообщение 1max1 28 янв 2020, 20:27

Синтаксис:
Используется csharp
public class CornMoving : MonoBehaviour
{
    GameObject Corn;
    public float Speed;
    public Vector3 CornMoveDirection;

    void FixedUpdate()
    {
        if (CornSpawning.queue.Count > 0)
        {
            Corn = CornSpawning.queue.Peek();

            Corn.transform.Translate(CornMoveDirection.normalized * Speed);

            if (цель достигнута)
            {
                CornSpawning.queue.Dequeue();
            }
        }
    }
}

public class CornSpawning : MonoBehaviour
{
    public Vector3 CornSpawnPoint;
    public GameObject Ear;
    public float SpawnTime;

    public static Queue<GameObject> queue = new Queue<GameObject>();

    void Start()
    {
        InvokeRepeating("Spawn", 0, SpawnTime);
    }

    void Spawn()
    {
        queue.Enqueue(Instantiate(Ear, CornSpawnPoint, Ear.transform.rotation));
    }
}
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Операции с объектами, имеющими общий тег

Сообщение Lothar de la Periere 29 янв 2020, 06:56

1max1 писал(а):
Синтаксис:
Используется csharp
public class CornMoving : MonoBehaviour
{
    GameObject Corn;
    public float Speed;
    public Vector3 CornMoveDirection;

    void FixedUpdate()
    {
        if (CornSpawning.queue.Count > 0)
        {
            Corn = CornSpawning.queue.Peek();

            Corn.transform.Translate(CornMoveDirection.normalized * Speed);

            if (цель достигнута)
            {
                CornSpawning.queue.Dequeue();
            }
        }
    }
}

public class CornSpawning : MonoBehaviour
{
    public Vector3 CornSpawnPoint;
    public GameObject Ear;
    public float SpawnTime;

    public static Queue<GameObject> queue = new Queue<GameObject>();

    void Start()
    {
        InvokeRepeating("Spawn", 0, SpawnTime);
    }

    void Spawn()
    {
        queue.Enqueue(Instantiate(Ear, CornSpawnPoint, Ear.transform.rotation));
    }
}


Я понял, ошибка в консоли - результат того, что, при старте игры, ни одного объекта с нужным тегом в сцене нет. Спасибо за наводку.
Но вторая проблема осталась, объекты по-прежнему приходят в движение по очереди.

P.S.
Corn = CornSpawning.queue.Peek(); - значение этой строки я так и не понял.
Аватара пользователя
Lothar de la Periere
UNец
 
Сообщения: 3
Зарегистрирован: 28 янв 2020, 18:44

Re: Операции с объектами, имеющими общий тег

Сообщение 1max1 29 янв 2020, 15:17

объекты по-прежнему приходят в движение по очереди.

А надо всем вместе? Я что-то не понял.

Синтаксис:
Используется csharp
public class CornMoving : MonoBehaviour
{
    GameObject Corn;
    public float Speed;
    public Vector3 CornMoveDirection;

    void FixedUpdate()
    {
        for (int i = 0; i < CornSpawning.list.Count; ++i)
        {
            var Corn = CornSpawning.list[i];

            Corn.transform.Translate(CornMoveDirection.normalized * Speed);

            if (цель достигнута)
            {
                CornSpawning.list.RemoveAt(i--);
            }
        }
    }
}

public class CornSpawning : MonoBehaviour
{
    public Vector3 CornSpawnPoint;
    public GameObject Ear;
    public float SpawnTime;

    public static List<GameObject> list = new List<GameObject>();

    void Start()
    {
        InvokeRepeating("Spawn", 0, SpawnTime);
    }

    void Spawn()
    {
        list.Add(Instantiate(Ear, CornSpawnPoint, Ear.transform.rotation));
    }
}
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot], Yandex [Bot] и гости: 27