Здравствуйте. Подскажите пожалуйста как ограничить выбор одного элемента цикла при общем кол-ве выбора элементов 4.
Есть меню выбора оружия, нужно сделать выбор четырех пушек, что бы каждую можно было выбрать только один раз. Сейчас одну и ту же пушку в цикле for можно выбрать все четыре раза
Я думаю надо сделать какую то проверку на "выбранность", но как это должно выглядеть в голову не приходит, да и может тут что-то другое нужно...
Скрипт:
Код
using UnityEngine; using System.Collections; using System.Collections.Generic; using System;
public class WeaponMenuV2 : MonoBehaviour { public int _Id = 0; public string weapString;
public int CountWeapon = 2;
public bool showWeaponMenu; public GUISkin guiSKin;
public List<TypeWeaponSelectNew> _TypeWeaponSelect = new List<TypeWeaponSelectNew>(); //Массив с оружием для выбора.
public List<int> SelectIdWeapon = new List<int>(); //Массив Айди выбранного оружия. public List<string> SelectWeap = new List<string>();
Нужно что бы GO оружия инстантиировалось на сцене, становилось дочерним к обьекту WeaponManager и что бы этот ГО добавлялся в сам скрипт WeaponManager. Помогите с работоспособностью скрипта.
Скрипт который висит в меню:
Код
using UnityEngine; using System.Collections; using System.Collections.Generic; using System;
public class WeaponMenu : MonoBehaviour { public List<TypeWeaponSelect> _TypeWeaponSelect = new List<TypeWeaponSelect>(); //Массив с оружием для выбора. public List<int> SelectIdWeapon = new List<int>(); //Массив Айди выбранного оружия. public int CountWeapon = 2; public int _Id=0; public int GetCountWeapon; public bool showWeaponMenu; public GUISkin guiSKin; void Start() { PlayerPrefs.DeleteAll(); //for (int G = 0; GetCountWeapon > G; G++) //{ // SelectIdWeapon.Add(PlayerPrefs.GetInt("WeaponIdSelect" + G.ToString())); //} } void OnGUI() { GUI.skin = guiSKin; if (showWeaponMenu) { GUI.Box(new Rect(Screen.width / 2 - 300, Screen.height / 2 - 200, 600, 400), "", GUI.skin.GetStyle("window")); GUI.Box(new Rect(Screen.width / 2 - 525, Screen.height / 2 - 384, 225, 768), "", GUI.skin.GetStyle("label")); if (_TypeWeaponSelect != null) { for (int i = 0; _TypeWeaponSelect.Count > i; i++) { if (GUI.Button(new Rect(30, 50 + (i * 20), 150, 15), _TypeWeaponSelect[i].WeaponName)) { _Id = _TypeWeaponSelect[i].WeaponId; } } } if (_Id != 0) { if (CountWeapon != 0) { if (GUI.Button(new Rect(150, 10, 150, 50), "Выбрать")) { CountWeapon--; SelectIdWeapon.Add(_Id); _Id = 0; } } else { GUI.Label(new Rect(250, 50, 150, 50), "Места нету"); if (GUI.Button(new Rect(150, 10, 150, 50), "Закончить выбор")) { for (int G = 0; SelectIdWeapon.Count > G; G++) { PlayerPrefs.SetInt("WeaponIdSelect" + G.ToString(), SelectIdWeapon[G]); Debug.Log("Запись id выбранного оружия" +G.ToString() +" id" +SelectIdWeapon[G].ToString()); } } } } } } } [Serializable] public class TypeWeaponSelect { public int WeaponId; //Айди оружия. public string WeaponName; //Имя оружия. public string SpeedFire; //Скорострельность. public string AmmoCount; //кол-во патронов. public WeaponScript _Weapon; //Ссылка в проект, на оружие. }
Работает вроде нормально.
Скрипт который висит в игре:
Код
using UnityEngine; using System.Collections; using System.Collections.Generic;
public class AddGetWeapon : MonoBehaviour { public List<TypeWeaponSelect> _TypeSelectWeapon= new List<TypeWeaponSelect>(); public int CountFindAdd=2; public bool Comlipe=false; public GameObject _WeaponManager; public List<int> intid = new List<int>(); void Start() { if (CountFindAdd > intid.Count) { for (int r = 0; r < CountFindAdd; r++) { intid.Add(PlayerPrefs.GetInt("WeaponIdSelect" + r.ToString())); Debug.Log("Считывание id выбранного оружия: " + r.ToString() + " id: " + PlayerPrefs.GetInt("WeaponIdSelect" + r.ToString()).ToString()); } } } void Update() {
if (!Comlipe) { Debug.Log("Add Select Weapon On WeaponManager"); if (_WeaponManager == null) { _WeaponManager = GameObject.Find("WeaponManager"); Debug.Log("Add Object WeaponManager"); } else { Debug.Log("For..."); for (int i = 0; _TypeSelectWeapon.Count > i; i++) { for (int _i = 0; i < intid.Count; _i++) { Debug.Log("Count Weapon On List" + " " + _TypeSelectWeapon.Count.ToString()); if (_TypeSelectWeapon[i].WeaponId==intid[_i]) { Debug.Log("PlayerPrefs id " + PlayerPrefs.GetInt("WeaponIdSelect" + i.ToString()) + " List id Weapon " + _TypeSelectWeapon[i].WeaponId.ToString()); GameObject Inst_GO = new GameObject(); Debug.Log("New Instatiate GameObject"); Inst_GO = Instantiate(_TypeSelectWeapon[i]._Weapon, _WeaponManager.transform.position, _WeaponManager.transform.localRotation) as GameObject; Debug.Log("Instatiate" + Inst_GO.name); _WeaponManager.transform.parent = Inst_GO.transform; Debug.Log("Parent " + _WeaponManager.name + " On " + Inst_GO.name); _WeaponManager.GetComponent<WeaponManager>().enabled = true; _WeaponManager.GetComponent<WeaponManager>().allWeapons.Add(Inst_GO.GetComponent<WeaponScript>()); Debug.Log("Add Weapon Manager " + Inst_GO.name); _WeaponManager.GetComponent<WeaponManager>().enabled = false; Inst_GO.active = false; Debug.Log("Deactivate " + Inst_GO.name); Inst_GO = null; Debug.Log("NULL OBJECT Instatiate"); if (_WeaponManager.GetComponent<WeaponManager>().allWeapons.Count == CountFindAdd - 1) { Comlipe = true; Debug.Log("Complite Add Weapon On Select Weapon"); } } } } } } } }
Останавливается выполнение скрипта после строки: GameObject Inst_GO = new GameObject(); Веду разработку проекта:
Рабочее название: Project [War Tanks] Жанр: не определено Платформа: PC Игровая Технология: Unity3D (4.3) Дата Начала Разработки:20,11,2013
Описание:
Будет Позже...
Готовность проекта: 10%
Что реализовано: 1. Физика танка. 2. Орудие танка с выстрелами. 3. Тестовая карта 80% 4. Озвучка танка и уровня. 5. Базовое упраление танком.
И на этом, пока всё. Ждите дальнейших новостей
1. Добавить немецкий танк "Panther II". 2. Доделать уровень. 3. Начало реализации тестовой мультиплеерной части. 4. Начать создание новой карты. Её рабочее название "Безымянные высоты". 5. Откорректировать управление танком.
Я только сейчас сюда зашел и увидел все это безобразие. Во первых этот текст писал не я а Украинский парень. Во Вторых, мне не 21 год а 14 (на момент создания темы было 13) и я припоминаю что я давал этому парню с Украины свою учётную запись ! Я конечно грамотей тот еще но такие ошибки ну не как не мог сделать даже в 7 классе ! И в третьих Именно, я парень по кличке Клизма ! (Я специально слово "клизма" написал с большой буквы). Веду разработку проекта: