Нужно что бы 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(); Веду разработку проекта: