Ребята, на текстурах, которые буду появляться, когда берешь предмет надо поставить (если не стоит) Texture type: sprite (2d and UI) иначе, когда будете разные предметы подбирать у вас будет выводится одна белая текстура!
@невис-л6з6 жыл бұрын
Скрипт для стандартного контроллера от первого лица: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class Inventory : MonoBehaviour { List list; public GameObject inventory; public GameObject image; public KeyCode takeButton; public KeyCode showInventory; void Start () { list = new List (); } void Update () { if (Input.GetKeyDown (takeButton)) { Ray ray = Camera.main.ScreenPointToRay (new Vector2 (Screen.width / 2, Screen.height / 2)); RaycastHit hit; if (Physics.Raycast (ray, out hit, 2f)) { Item item = hit.collider.GetComponent (); if (item != null) { list.Add (item); Destroy (hit.collider.gameObject); } } } if (Input.GetKeyDown (showInventory)) { if (inventory.activeSelf) { inventory.SetActive (false); for (int i = 0; i < inventory.transform.childCount; i++) { if (inventory.transform.GetChild (i).transform.childCount > 0) { Destroy (inventory.transform.GetChild(i).transform.GetChild(0).gameObject); } } } else { inventory.SetActive (true); int count = list.Count; for (int i = 0; i < count; i++) { Item it = list [i]; if (inventory.transform.childCount >= i) { GameObject img = Instantiate (image); img.transform.SetParent (inventory.transform.GetChild (i).transform); img.GetComponent ().sprite = Resources.Load (it.sprite); img.AddComponent().onClick.AddListener(() => remove(it, img)); } else break; } } } } void remove(Item it, GameObject obj) { GameObject newo = Instantiate (Resources.Load (it.prefab)); newo.transform.position = transform.position + transform.forward + transform.up; Destroy (obj); list.Remove (it); } }
@stream28499 жыл бұрын
using UnityEngine; using System.Collections; using System.Collections.Generic; using UnityEngine.UI; public class Inventory : MonoBehaviour { List list; public GameObject inventory; public GameObject container; public JessicaScript controller; // Use this for initialization void Start () { list = new List(); controller = GetComponent(); } // Update is called once per frame void Update () { if(Input.GetMouseButtonUp(1)) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if(Physics.Raycast(ray, out hit)) { Item item = hit.collider.GetComponent(); if(item != null) { list.Add(item); Destroy(hit.collider.gameObject); } } } if(Input.GetKeyUp(KeyCode.I)) { if(inventory.activeSelf) { inventory.SetActive(false); for(int i = 0; i < inventory.transform.childCount; i++) { if(inventory.transform.GetChild(i).transform.childCount > 0) { Destroy(inventory.transform.GetChild(i).transform.GetChild(0).gameObject); } } } else { inventory.SetActive(true); int count = list.Count; for(int i = 0; i < count; i++) { Item it = list[i]; if(inventory.transform.childCount >= i) { GameObject img = Instantiate(container); img.transform.SetParent(inventory.transform.GetChild(i).transform); img.GetComponent().sprite = Resources.Load(it.sprite); img.GetComponent().item = it; } else break; } } } } void use(Drag drag) { if(drag.item.type == "food") { controller.addFood(50); } else if(drag.item.type == "hand") { HandItem myitem = Instantiate(Resources.Load(drag.item.prefab)).GetComponent(); controller.addHand(myitem); } list.Remove (drag.item); Destroy(drag.gameObject); } void remove(Drag drag) { Item it = drag.item; GameObject newo = Instantiate(Resources.Load(it.prefab)); newo.transform.position = transform.position + transform.forward + transform.up; Destroy(drag.gameObject); list.Remove(it); } }
@therodnichannel24419 жыл бұрын
+Stream (утерянные видео) Спасибо
@ffuribeach25568 жыл бұрын
Stream (утерянные видео) geggdhhddh
@zotovasyt4 жыл бұрын
у меня при подборе предмета не отображается иконка в инвентаре. Предмет исчезает со сцены, но в инвентаре ничего нет
@lertenpoler7 жыл бұрын
Под Unity5.6 не работает. Сначала всё работает, ошибок нет. Но если закрыть Unity а потом открыть то в инвентаре предмет перестаёт отображаться.
@OttogiMazik8 жыл бұрын
Подскажите, туплю что-то. Как сделать так, чтобы расположение ячеек сохранялось после перезапуска инвентаря? Поглядел, при отключении инвентарь "обнуляется", детей у ячеек нет, и при включении они по порядку листа заново добавляются внутрь.
@andreimaroz62027 жыл бұрын
Скорей всего уже не актуально для Вас, но все же... Нужно добавить номер ячейки в проперти айтема, ну и изменить чутка логику фора в наполнении инвентаря, используя это проперти
@DrTauren7 жыл бұрын
При добавлении предмета в инвентарь, он сразу там не отображается. Только если закрыть, а потом открыть снова, то тогда предмет там появится. Не пойму в чём дело
@tomasgammister57766 жыл бұрын
срабатывает ведь на условие нажатия I. а на повторное срабатывает очистка. как-то не совсем правильно сделано. пытаюсь сделать интерактивным, но своими силами не получается пока. буду искать подобные видео
@creepydan-vadval-channel27718 жыл бұрын
Привет, поздновато, но можешь помочь: Не отображается иконка предмета (просто белый квадрат). Код полностью перепроверял пару раз..
@igorcoolman7 жыл бұрын
у меня тоже пустые квадраты в инверторе почему то.
@igorcoolman7 жыл бұрын
а при попытке выкинуть предмет ошибка выскакивает в строке GameObject newo = Instantiate(Resources.Load(it.prefab));
@andreimaroz62027 жыл бұрын
Скорей всего уже не актуально, но все же... Думаю у Вас не правильный тип текстуры - должен быть Sprite 2D and UI
@ArtemD_f5 жыл бұрын
ПСС благодарить не надо я там нимного под себя переделал using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class Inventory : MonoBehaviour { List list; public GameObject inventory; public GameObject container; void Start () { list = new List(); } void Update () { if (Input.GetKeyDown(KeyCode.F)) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit, 2f)) { Item item = hit.collider.GetComponent(); if (item != nul) { list.Add(item); Destroy(hit.collider.gameObject); } } } if (Input.GetKeyDown(KeyCode.Tab)) { if (inventory.activeSelf) { inventory.SetActive(false); for (int i = 0; i < inventory.transform.childCount; i++) { if(inventory.transform.GetChild(i).transform.childCount > 0) { Destroy(inventory.transform.GetChild(i).transform.GetChild(0).gameObject); } } } else { inventory.SetActive(true); int count = list.Count; for(int i = 0; i < count; i++) { Item it = list[i]; if (inventory.transform.childCount >= i) { GameObject img = Instantiate(container); img.transform.SetParent(inventory.transform.GetChild(i).transform); img.GetComponent().sprite = Resources.Load(it.sprite); img.AddComponent().onClick.AddListener(()=> remove(it, img)); } else break; } } } } void remove(Item it, GameObject obj) { GameObject newo = Instantiate(Resources.Load(it.prefab)); newo.transform.position = transform.position + transform.forward + transform.up; Destroy(obj); list.Remove(it); } }
@innocshipil81038 жыл бұрын
list.Add(item); - заносим ссылку на экземпляр класса Item болтающийся где то в памяти в элемент списка list Destroy(hit.collider.gameObject); - удаляем гем обдж вместе с прикрепленным упомянутым выше экземпляром Item. !!! Мы удалили данные на которые элемент list указывал. У меня взрыв мозга и срыв шаблонов. Как в ролике дальше прога умудряется работать? Как будто данные экземпляра Item на которые ссылается элемент list удалены не были. Объясните не дайте помереть дураком.
@OttogiMazik8 жыл бұрын
Так мы скрипт Item заносим в List, и оперируем с ним для нужной картинки и префаба.
@stepanturitsin42198 жыл бұрын
У меня не получается забирать предметыМой игрок от первого лица
@OttogiMazik8 жыл бұрын
Может упустили что-то. Проверьте, раскидали ли все скрипты и прочее, как в уроке. Или опишите проблему подробнее.
@stepanturitsin42198 жыл бұрын
Я переписывал скрипт Inventory несколько раз, Item просто создал. Скрипт Inventory пробовал скидывать в FirstPersonController и FirstPersonCharacter. Item скидывал на предметы, которые мне нужно подобрать и делал на них Rigidbody. У меня они просто не подбирались и всё тут. У меня unity personal. P.S Пробовал также с моделью человека (ThirdPersonController)
@stepanturitsin42198 жыл бұрын
Могу скинуть изображение
@OttogiMazik8 жыл бұрын
Окей. В каком смысле не подбирались? Всм происходят 4 вещи: 1) Пускается рейкаст и находит на объекте компонент Item. 2) Скрипт Item с предмета добавляется в Лист. (его можно сделать публичным, чтобы увидеть). 3) "Подобранный" гейм-обджект удаляется со сцены. 4) Создаётся ячейка в инвентаре. Какую-нибудь ошибку выдаёт Юнити?