Поиск предмета в инвенторе помогите плиз

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Поиск предмета в инвенторе помогите плиз

Сообщение spasesity 31 авг 2012, 16:05

Подскажите как сделать поиск предметов в инвентаре по имени?
Есть персонаж у которого есть инвентарь и там есть предметы которые он подбирает или покупает.
Если предмет есть, то выполнить действие, если нету, то не выполнять ни чего.
Вот скрипт инвентаря.
Синтаксис:
Используется csharp

using UnityEngine;
using System.Collections;
using System.Collections.Generic; //библиотека для управления List-ингом

public class Pawn : MonoBehaviour {
        public string Name = "Unnamed";
        public List<GameObject> Inventory; // описание переменной
        }
 

а вот скрипт описания предмета
Синтаксис:
Используется csharp

using UnityEngine;
using System.Collections;

public class ItemExt : MonoBehaviour {

public Texture2D icon;
       
        public ItemType itemType = ItemType.Plants;
        public string Name = "Название";
        public float Durability = 50;
       
        public int PriceK = 10; // цена по которой покупаем
        public int PriceP = 1;         // цена по которой продаем
        public string ToolTip(){
                 
                 return "Название : "+ Name + "\n" +
                                "Износ : " + Durability + "\n" +
                                "Цена покупки: " + PriceK+"к "+ "\n" +
                                "Цена продажи: " + PriceP+"к";
       
        }
}

public enum ItemType{
        Weapon,         //      Оружие
        Cloth,          //      Ткань
        Armor,          //      Броня
        Plants,         //  растения
        Garden  ,       //      для огорода
        Inventory       //  инвентарь
}

 
Последний раз редактировалось spasesity 01 сен 2012, 16:20, всего редактировалось 1 раз.
spasesity
UNец
 
Сообщения: 35
Зарегистрирован: 17 май 2012, 22:54

Re: Поиск предмета в инвенторе

Сообщение Sokol 31 авг 2012, 16:37

Inventory представляет из себя геймобджекты со скриптом ItemExt? Если да, то как-то так

Синтаксис:
Используется csharp
foreach (GameObject go in Inventory){
    ItemExt i = (ItemExt) go.GetComponent<ItemExt>();
    if (i.Name == "нужноеимя"){
        DoSomething();
    }
}
Последний раз редактировалось Sokol 03 сен 2012, 19:37, всего редактировалось 1 раз.
Sokol
UNец
 
Сообщения: 36
Зарегистрирован: 22 авг 2012, 21:12

Re: Поиск предмета в инвенторе

Сообщение spasesity 31 авг 2012, 16:48

Sokol писал(а):Inventory представляет из себя геймобджекты со скриптом ItemExt? Если да, то как-то так

Inventory - это список обьектов, который находится у персонажа в скрипте Pawn, а ItemExt на каждом обьекте.
spasesity
UNец
 
Сообщения: 35
Зарегистрирован: 17 май 2012, 22:54

Re: Поиск предмета в инвенторе

Сообщение spasesity 31 авг 2012, 19:33

в целом это работает, но только если этот список находится в этом же скрипте.
А как сделать что бы он список брал с персонажа?
перепробовал много разного, всегда выдает ошибку, может что то не то делаю?
spasesity
UNец
 
Сообщения: 35
Зарегистрирован: 17 май 2012, 22:54

Re: Поиск предмета в инвенторе

Сообщение Syberex 01 сен 2012, 00:41

spasesity писал(а):в целом это работает, но только если этот список находится в этом же скрипте.
А как сделать что бы он список брал с персонажа?
перепробовал много разного, всегда выдает ошибку, может что то не то делаю?

Дак разве не на персонажа этот (Pawn) скрипт вешается? Или у вас есть еще какой то скрипт-менеджер?

Надо что-то типа:
char.GetComponent<Pawn>().GetItemCount("Egg");

Покажите скрипт Pawn побольше :)
Аватара пользователя
Syberex
Адепт
 
Сообщения: 2292
Зарегистрирован: 14 янв 2011, 20:35
Откуда: Кострома
  • Сайт

Re: Поиск предмета в инвенторе

Сообщение spasesity 01 сен 2012, 08:17

Это весь скрипт Pawn.
Все с этим разобрался, всем большое спасибо.
получилось так

Синтаксис:
Используется csharp
foreach (GameObject go in _player.GetComponent<Pawn>().Inventory){
                                ItemExt i = go.GetComponent<ItemExt>();
                        if (i.Name == "Картошка"){
                        // какое либо действие
                                }
                        }
 

А как мне теперь удалить обьект с именем картошка?
пробовал так
_player.GetComponent<Pawn>().Inventory.Remove(cnt);
удаляется первый обьект из инвенторя.
как быть?
spasesity
UNец
 
Сообщения: 35
Зарегистрирован: 17 май 2012, 22:54

Re: Поиск предмета в инвенторе помогите плиз

Сообщение Syberex 01 сен 2012, 23:47

А что такое cnt?

Синтаксис:
Используется csharp
//Syntax C#
public bool Remove(T item)
 

List<T>.Remove Method
в параметре нужно передавать сылку на ItemExt.
Аватара пользователя
Syberex
Адепт
 
Сообщения: 2292
Зарегистрирован: 14 янв 2011, 20:35
Откуда: Кострома
  • Сайт

Re: Поиск предмета в инвенторе помогите плиз

Сообщение Woolf 02 сен 2012, 00:56

spasesity, а вам не кажется способ создания инвентаря в виде GameObject несколько ущербным? Почему бы вам не сделать класс-сущность предмета, каждый предмет со своим id и хранить весь инвентарь, скажем, в Dictionary ? А GO создавать уже только по мере необходимости взуализировать предмет. Причем, каждая конкретная сущность предмета будет знать все про свой GO и сама его содержать. Так же логичнее!
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Поиск предмета в инвенторе помогите плиз

Сообщение spasesity 03 сен 2012, 14:13

Woolf писал(а):spasesity, а вам не кажется способ создания инвентаря в виде GameObject несколько ущербным? Почему бы вам не сделать класс-сущность предмета, каждый предмет со своим id и хранить весь инвентарь, скажем, в Dictionary ? А GO создавать уже только по мере необходимости взуализировать предмет. Причем, каждая конкретная сущность предмета будет знать все про свой GO и сама его содержать. Так же логичнее!

Возможно, а как это реализовать?
Можно хотя бы набросок скрипта?
spasesity
UNец
 
Сообщения: 35
Зарегистрирован: 17 май 2012, 22:54

Re: Поиск предмета в инвенторе помогите плиз

Сообщение Syberex 03 сен 2012, 15:28

Сделать класс ItemExt не образованным от MonoBehavior, а самостоятельным :)
Аватара пользователя
Syberex
Адепт
 
Сообщения: 2292
Зарегистрирован: 14 янв 2011, 20:35
Откуда: Кострома
  • Сайт

Re: Поиск предмета в инвенторе помогите плиз

Сообщение Рэндом 03 сен 2012, 15:52

Посмотрите MSDN про Dictionary. Там все на русском. Но если память не изменяет Dictionary<string,GameObject> Pawn. string ключ, GameObject значение. выборка из словаря GameObject o=Pawn[key], где key строка.
Аватара пользователя
Рэндом
UNIверсал
 
Сообщения: 485
Зарегистрирован: 02 июн 2012, 04:06

Re: Поиск предмета в инвенторе помогите плиз

Сообщение spasesity 05 сен 2012, 14:28

Рэндом писал(а):Посмотрите MSDN про Dictionary. Там все на русском. Но если память не изменяет Dictionary<string,GameObject> Pawn. string ключ, GameObject значение. выборка из словаря GameObject o=Pawn[key], где key строка.

а пример можно?
spasesity
UNец
 
Сообщения: 35
Зарегистрирован: 17 май 2012, 22:54

Re: Поиск предмета в инвенторе помогите плиз

Сообщение Syberex 05 сен 2012, 14:59

Рэндом писал(а):Посмотрите MSDN про Dictionary. Там все на русском. Но если память не изменяет Dictionary<string,GameObject> Pawn. string ключ, GameObject значение. выборка из словаря GameObject o=Pawn[key], где key строка.

Это хорошо если предметы группируются по видам и каждый вид будет лежать в инвентаре 1 раз, то есть будет количественный учет. Если учет по ячейкам, тогда не пойдет ...
Аватара пользователя
Syberex
Адепт
 
Сообщения: 2292
Зарегистрирован: 14 янв 2011, 20:35
Откуда: Кострома
  • Сайт

Re: Поиск предмета в инвенторе помогите плиз

Сообщение Woolf 05 сен 2012, 16:18

Причем здесь вид? Каждый предмет уникален, имеет свой id и не обязательно string. Если у вас 10 мечей, то какая разница, одинаковые они с виду или нет ( тем более, что наверное они не будут одинаковы - у каждого свой износ, к примеру)
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Поиск предмета в инвенторе помогите плиз

Сообщение Рэндом 06 сен 2012, 10:41

Можно вообще забабахать массив. Ведь количество ячеек под предметы как правило ограничено. Плюс в том, что выборка будет происходить быстрее.
Аватара пользователя
Рэндом
UNIверсал
 
Сообщения: 485
Зарегистрирован: 02 июн 2012, 04:06

След.

Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 25