public void EnemyPoolCreate(int size1, int size2) { settingObject = new CommonSettingObject { Healht = 1, Speed = EnvironmentSingleton.Instance.Width * 0.1f, Size = EnvironmentSingleton.Instance.Width * 0.05f }; size = size1; maxSize = size2; incCapacity = size1; size = size < maxSize ? size : maxSize; enemyArray = new Enemy[size]; GameObject gameObjectNew; for (int i = 0; i < enemyArray.Length; i++) { //создаем объект и записываем в пул только привязанный компонент со скриптом(ведь всегда можно получить объект) gameObjectNew = Instantiate(enemy); gameObjectNew.transform.SetParent(parentEnemyPool); enemyArray[i] = gameObjectNew.GetComponent <Enemy>(); enemyArray[i].SettingObject = settingObject; //подписываемся на событие enemyArray[i].DieEvent += OnDeadEnemy; } }
// Use this for initialization private void Awake() { settingObject = new CommonSettingObject { Healht = 3, Speed = EnvironmentSingleton.Instance.Width * 0.1f, Size = EnvironmentSingleton.Instance.Width * 0.05f }; //чтобы не вызывать каждый раз getComponent при обращении cacheRigidbody2D = GetComponent <Rigidbody2D>(); shiftByVector = cacheRigidbody2D.position; //устанавливаем размер, и начальное положение //используем только 1 раз, поэтому можно не кэшировать GetComponent <SpriteRenderer>().size = new Vector2(settingObject.Size, settingObject.Size); cacheRigidbody2D.MovePosition(new Vector2(0, 0)); GetComponent <BoxCollider2D>().size = new Vector2(settingObject.Size * 0.95f, settingObject.Size * 0.95f); //установим, что при спавне объект смотрит направо shiftByVector = Vector2.right * settingObject.Speed * Time.fixedDeltaTime; widthMaxPosition = EnvironmentSingleton.Instance.WidthMax; heightMaxPosition = EnvironmentSingleton.Instance.HeightMax; }