Скрипт работает с последним объектом

Программирование на Юнити.

Скрипт работает с последним объектом

Сообщение seregaGamDev 01 авг 2018, 22:58

Всем привет, столкнулся с проблемой которую не могу самостоятельно решить.

Я создал объект "враг" на него поместил скрипт.

Код: Выделить всё
public GameObject objectsEnemy;
эта ссылка на объект "пуля"

Синтаксис:
Используется csharp
public class EnemyLogic : MonoBehaviour {

    public GameObject objectsEnemy;
    GameObject bullet;


    // Use this for initialization
    void Start()
    {
        Vector3 pos = transform.position;
        Debug.Log(pos.x + " " + pos.y + " " + pos.z);
        var objectsEnemys = objectsEnemy.GetComponent<BulletLogic>();
        objectsEnemys.setPositionsVector3(pos.x, pos.y, pos.z);

        Instantiate(objectsEnemy);

    }

    // Update is called once per frameЫ
    void Update()
    {
        // Destroy(GameObject.Find("bullet(Clone)"));
        if (GameObject.Find("Bullet(Clone)") == null)
        {
            Instantiate(objectsEnemy);
        }
    }
}


Но когда я клонирую врагов

Синтаксис:
Используется csharp
void Start()
    {
        for (int i = 0; i < 5; i++)
        {
            GameObject instance =
                        Instantiate(enemy, new Vector3(5f+i, -i+3f, -.3f), Quaternion.identity) as GameObject;
        }
    }


Последний враг только стреляет, хотя перед запуском сцены каждый враг единожды выпустил пулю.
seregaGamDev
UNец
 
Сообщения: 5
Зарегистрирован: 01 авг 2018, 22:46

Re: Скрипт работает с последним объектом

Сообщение Anonymyx 01 авг 2018, 23:40

Какой-то странная логика...
А что вообще должно получиться? Как должно быть?
Аватара пользователя
Anonymyx
Адепт
 
Сообщения: 1973
Зарегистрирован: 05 апр 2015, 15:55

Re: Скрипт работает с последним объектом

Сообщение seregaGamDev 02 авг 2018, 00:06

Anonymyx писал(а):Какой-то странная логика...
А что вообще должно получиться? Как должно быть?


Представьте игру башни. Вот у меня та же. Есть враг в которого есть оружие и он им должен стрелять. Всё ок работает когда он один, а когда их уже больше, только последний стреляет а остальные стоят без дела. Мне кажется это из-за того, что в консоле после запуска сцены отображаются несколько bullet(Clone) А после самоуничтожения, в консоле остается только один объект bullet(Clone). Остальные враги не могут генерировать пули.
seregaGamDev
UNец
 
Сообщения: 5
Зарегистрирован: 01 авг 2018, 22:46

Re: Скрипт работает с последним объектом

Сообщение seregaGamDev 02 авг 2018, 07:17

Если я создал еще один объект пули и присвоил ей другое имя, тогда уже два врага умеют стрелять, но обоими снарядами управляет один скрипт. То есть, если один враг попал в цель, то значит и второй враг попал.
seregaGamDev
UNец
 
Сообщения: 5
Зарегистрирован: 01 авг 2018, 22:46

Re: Скрипт работает с последним объектом

Сообщение seregaGamDev 02 авг 2018, 07:45

Вот крипт пули
Код: Выделить всё
public class BulletLogic : MonoBehaviour {
    public float speed = 1.5f;
    public float tameFile = 1f;

   

   // Use this for initialization
   void Start () {
   
   }

   // Update is called once per frame
   void Update () {
        tameFile -= Time.deltaTime;

        if (tameFile <= 0) {
            DestroyObject(gameObject);
        }

        transform.Translate(new Vector2(-speed, 0));
   }

    void OnCollisionEnter2D(Collision2D myCollision)
    {
        // определение столкновения с двумя разноименными объектами
        if (myCollision.gameObject.tag == "Char")
        {
             DestroyObject(gameObject);
        }
    }



    public void setPositionsVector3(float x, float y, float z)
    {
        Debug.Log(x + " " + y + " " + z);
        transform.position = new Vector3(x, y, z);

    }
}

seregaGamDev
UNец
 
Сообщения: 5
Зарегистрирован: 01 авг 2018, 22:46

Re: Скрипт работает с последним объектом

Сообщение seaman 02 авг 2018, 08:27

Научитесь для начала нормально оформлять код на форуме....
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Скрипт работает с последним объектом

Сообщение seregaGamDev 02 авг 2018, 16:40

seaman писал(а):Научитесь для начала нормально оформлять код на форуме....


Вероятно, я не там спрашиваю.
seregaGamDev
UNец
 
Сообщения: 5
Зарегистрирован: 01 авг 2018, 22:46

Re: Скрипт работает с последним объектом

Сообщение 1100001001 02 авг 2018, 16:51

Спрашиваешь ты там, но не понятна внутренняя кухня твоего проекта, получается на объекте враг висит скрипт в котором есть публичная переменная для хранения ссылки на объект пуля? Но зачем? Клонируешь ты врага вместе с этой самой пулей, до выполнения метода start? Т.к. у тебя обе операции в методе start() ты уверен что клонирование происходит до того как уже создалась пуля? Т.к. если после, выстрел будет лишь один. Добавь тогда стрельбу по нажатию кнопки. Клонируй врагов, а затем нажми кнопку для выстрела. Либо делай через систему событий или придумай метод для выстрела и в какой нибудь менеджер засунь ссылку на этот метод для каждого врага. Ну а если совсем туго, то делай пак проекта с вырезкой всего лишнего и публикуй здесь.
_https://vk.ru/belovedtoy
Аватара пользователя
1100001001
UNITрон
 
Сообщения: 276
Зарегистрирован: 26 сен 2012, 05:34
  • Сайт

Re: Скрипт работает с последним объектом

Сообщение seaman 02 авг 2018, 17:12

Есть наверху кнопочка "CS". Используйте ее, пожалуйста для выделения кода.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Скрипт работает с последним объектом

Сообщение Xtir 02 авг 2018, 17:51

Често говоря, я в... тоже ничего не понял.
Я создал объект "враг" на него поместил скрипт.

Не увидел скрипт который Вы поместили на врага.
Синтаксис:
Используется csharp
void Update()
    {
        // Destroy(GameObject.Find("bullet(Clone)"));
        if (GameObject.Find("Bullet(Clone)") == null)
        {
            Instantiate(objectsEnemy);
        }
    }

А в чём смысл этого кода? Если объект пуля не найден, то спауним врагов, так?
Xtir
UNIверсал
 
Сообщения: 498
Зарегистрирован: 21 окт 2016, 00:37


Вернуться в Скрипты

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

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