Страница 1 из 1

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

СообщениеДобавлено: 01 авг 2018, 22:58
seregaGamDev
Всем привет, столкнулся с проблемой которую не могу самостоятельно решить.

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

Код: Выделить всё
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;
        }
    }


Последний враг только стреляет, хотя перед запуском сцены каждый враг единожды выпустил пулю.

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

СообщениеДобавлено: 01 авг 2018, 23:40
Anonymyx
Какой-то странная логика...
А что вообще должно получиться? Как должно быть?

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

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


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

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

СообщениеДобавлено: 02 авг 2018, 07:17
seregaGamDev
Если я создал еще один объект пули и присвоил ей другое имя, тогда уже два врага умеют стрелять, но обоими снарядами управляет один скрипт. То есть, если один враг попал в цель, то значит и второй враг попал.

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

СообщениеДобавлено: 02 авг 2018, 07:45
seregaGamDev
Вот крипт пули
Код: Выделить всё
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);

    }
}


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

СообщениеДобавлено: 02 авг 2018, 08:27
seaman
Научитесь для начала нормально оформлять код на форуме....

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

СообщениеДобавлено: 02 авг 2018, 16:40
seregaGamDev
seaman писал(а):Научитесь для начала нормально оформлять код на форуме....


Вероятно, я не там спрашиваю.

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

СообщениеДобавлено: 02 авг 2018, 16:51
1100001001
Спрашиваешь ты там, но не понятна внутренняя кухня твоего проекта, получается на объекте враг висит скрипт в котором есть публичная переменная для хранения ссылки на объект пуля? Но зачем? Клонируешь ты врага вместе с этой самой пулей, до выполнения метода start? Т.к. у тебя обе операции в методе start() ты уверен что клонирование происходит до того как уже создалась пуля? Т.к. если после, выстрел будет лишь один. Добавь тогда стрельбу по нажатию кнопки. Клонируй врагов, а затем нажми кнопку для выстрела. Либо делай через систему событий или придумай метод для выстрела и в какой нибудь менеджер засунь ссылку на этот метод для каждого врага. Ну а если совсем туго, то делай пак проекта с вырезкой всего лишнего и публикуй здесь.

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

СообщениеДобавлено: 02 авг 2018, 17:12
seaman
Есть наверху кнопочка "CS". Используйте ее, пожалуйста для выделения кода.

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

СообщениеДобавлено: 02 авг 2018, 17:51
Xtir
Често говоря, я в... тоже ничего не понял.
Я создал объект "враг" на него поместил скрипт.

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

А в чём смысл этого кода? Если объект пуля не найден, то спауним врагов, так?