В менеджере:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FormationsManager : MonoBehaviour
{
public Transform squadMemeberPrefab;
public int numberOfSquadMembers = 20;
public int columns = 4;
public int gaps = 10;
public Formations formations;
private int numofmembers;
// Use this for initialization
void Start()
{
numofmembers = numberOfSquadMembers;
formations.Init(numberOfSquadMembers, columns, gaps);
GenerateSquad();
}
// Update is called once per frame
void Update()
{
if (numofmembers != numberOfSquadMembers)
{
GenerateSquad();
}
}
private void GenerateSquad()
{
Transform go = squadMemeberPrefab;
for (int i = 0; i < formations.newpositions.Count; i++)
{
go = Instantiate(squadMemeberPrefab);
go.position = formations.newpositions[i];
go.tag = "Squad Member";
go.transform.parent = gameObject.transform;
}
}
}
И скрипт Formations:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Formations : MonoBehaviour
{
public List<Vector3> newpositions;
private int numberOfSquadMembers;
private int columns;
private int gaps;
private List<Quaternion> quaternions;
private Vector3 FormationSquarePositionCalculation(int index)
{
float posX = (index % columns) * gaps;
float posY = (index / columns) * gaps;
return new Vector3(posX, posY);
}
private void FormationSquare()
{
newpositions = new List<Vector3>();
quaternions = new List<Quaternion>();
for (int i = 0; i < numberOfSquadMembers; i++)
{
Vector3 pos = FormationSquarePositionCalculation(i);
Vector3 position = new Vector3(transform.position.x + pos.x, 0, transform.position.y + pos.y);
newpositions.Add(position);
}
}
public void Init(int numberOfSquadMembers, int columns, int gaps)
{
this.numberOfSquadMembers = numberOfSquadMembers;
this.columns = columns;
this.gaps = gaps;
FormationSquare();
}
}
Что я хочу сделать, так это в FormationsManager в Обновлении не только вызвать GenerateSquad, но и добавить новый один раз в последнюю / следующую позицию существующей уже формации.
void Update()
{
if (numofmembers != numberOfSquadMembers)
{
GenerateSquad();
}
}
Если значение numberOfSquadMembers в первый раз равно 20, а затем я изменил его на 21, добавьте новый объект в конец формирования, и то же самое, если я изменю значение numberOfSquadMembers, например, с 20 на 19 или с 21 на 5, уничтожим количество объектов с конца и форма формации.
![Formation](https://i.stack.imgur.com/TsI0b.jpg)
Солдаты, последняя строка на правой стороне.
Так что, если я изменю значение, чтобы добавить больше, то добавлю его справа, а если я изменю на меньшее, уничтожу с правой стороны. Самый левый ряд солдат - первый.