Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class ObjectChooserScript : MonoBehaviour {
- public int param1 = 0;
- public int param2 = 0;
- public int param3 = 0;
- public int param4 = 0;
- public int param5 = 0;
- public int param6 = 0;
- void Start () {
- param1 = Random.Range (0, 4);
- param2 = Random.Range (0, 7);
- param3 = Random.Range (0, 5);
- param4 = Random.Range (0, 5);
- param5 = Random.Range (0, 9);
- param6 = Random.Range (0, 2);
- }
- public class ObjectSpawnerScript : MonoBehaviour {
- public Transform myObject;
- public int maxObjects = 10;
- public int curObjects = 0;
- // Use this for initialization
- void Start () {
- for (int i = curObjects; i < maxObjects; i++) {
- // тут просто определяются координаты, по которым создается объект
- Instantiate (myObject, new Vector3(Random.Range (-9, 9)
- , Random.Range(-3, 6)
- , Random.Range(0, 4)), Quaternion.identity);
- curObjects++;
- }
- }
- public class Param
- {
- public int Value;
- public int TLim;
- public int DLim;
- public Param(int d, int t)
- {
- TLim = t;
- DLim = d;
- Value = d;
- }
- }
- public class Spawner : MonoBehaviour
- {
- Param[] param = new Param[5];
- GameObject PrefabWithObjectChooserScript;
- static List<int[]> Combinations = new List<int[]>();
- void Start()
- {
- param[0] = new Param(0, 2);
- param[1] = new Param(0, 3);
- param[2] = new Param(0, 4);
- param[3] = new Param(0, 4);
- param[4] = new Param(0, 3);
- }
- // Вызвать эту функцию для генерации нового объекта.
- public void Generate()
- {
- if(Combinations.Count > 0)
- {
- var go = Instantiate(PrefabWithObjectChooserScript) as GameObject;
- go.GetComponent<ObjectChooserScript>().Init(Combinations[Combinations.Count - 1]);
- Combinations.RemoveAt(Combinations.Count - 1);
- return;
- }
- for (int i = param.Length - 1; i >= 0; --i)
- {
- if (param[i].Value != param[i].TLim)
- {
- int[] values = new int[param.Length];
- for (int g = 0; g < param.Length; ++g)
- values[g] += param[g].Value;
- var go = Instantiate(PrefabWithObjectChooserScript) as GameObject;
- go.GetComponent<ObjectChooserScript>().Init(values);
- ++param[i].Value;
- for (int j = i + 1; j < param.Length; ++j)
- {
- param[j].Value = param[j].DLim;
- }
- return;
- }
- }
- Debug.Log("Больше нет доступных комбинаций");
- }
- public static void ReturnValues(int [] values)
- {
- Combinations.Add(values);
- }
- }
- public class ObjectChooserScript : MonoBehaviour
- {
- public int [] param = new int[5];
- public void Init(int[] p)
- {
- for (int i = 0; i < p.Length; ++i)
- param[i] = p[i];
- }
- private void OnDestroy()
- {
- Spawner.ReturnValues(param);
- }
- }
- public void InitParams(params int[] myparams)
- {
- param1 = myparams[0];
- param2 = myparams[1];
- // ... и т.д.
- }
- void Start () {
- param6 = Random.Range (0, 2);
- }
- List<int[]> arrayList = new List<int[]>();
- using System;
- using System.Collections.Generic;
- using System.Linq;
- List<int[]> arrayList = new List<int[]>();
- int[] GenerateRandom() {
- int[] params = new int[5];
- params[0] = Random.Range (0, 4);
- params[1] = Random.Range (0, 7);
- params[2] = Random.Range (0, 5);
- params[3] = Random.Range (0, 5);
- params[4] = Random.Range (0, 9);
- // тут логика сравнения массива с массивами в списке
- // Если есть совпадение, то перевызываем метод GenerateRandom()
- foreach (var array in arrayList) {
- if (myparams.Length == array.Length && myparams.Intersect(array).Count() == myparams.Length) {
- return GenerateParams();
- }
- }
- // если всё норм, то добавляем в список:
- // возвращаем массив:
- arrayList.Add(myparams);
- return myparams;
- }
- for (int i = curObjects; i < maxObjects; i++) {
- // Берем индивидуальный список уникальных параметров
- var myparams = GenerateRandom();
- // Инстанциируем объект
- var myobj = Instantiate (myObject, new Vector3(Random.Range (-9, 9)
- , Random.Range(-3, 6)
- , Random.Range(0, 4)), Quaternion.identity);
- // пихаем в него параметры
- myobj.InitParams(myparams);
- curObjects++;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement