Четверг, 14 Ноября 2024, 21:37

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Вопрос-[ответ] по Unity
QWER56Дата: Понедельник, 09 Августа 2010, 10:58 | Сообщение # 1
старожил
Сейчас нет на сайте
Вопрос-[Ответ] по Unity3d

  • База скриптов Unity3d
  • Курс Уроков по Unity 3D от Alcatraz

    ConsMark - поисковик по интернет магазинам.

    Сообщение отредактировал QWER56 - Вторник, 26 Июля 2011, 20:54
  • XoidДата: Суббота, 06 Июня 2015, 19:38 | Сообщение # 7001
    почетный гость
    Сейчас нет на сайте
    SerPerseval, вот Ответ (первый сайт в списке, первый пост) biggrin

    skype:xoid_main | С#/Unity
    allodsДата: Понедельник, 08 Июня 2015, 15:34 | Сообщение # 7002
    почти ветеран
    Сейчас нет на сайте
    Привет

    Нужно в скрипте прям в инспекторе все красиво расставить под Спойлеры, как это устроить

    Второй вопрос

    Есть скрипт с Таблицей (List) всяких объектов состоящих из классов

    Как в другом скрипте можно сделать так чтобы можно было просто выбрать один из классов, как мы это делаем выбирая LayerMask к примеру


    Сообщение отредактировал allods - Понедельник, 08 Июня 2015, 15:44
    NEBRДата: Понедельник, 08 Июня 2015, 17:14 | Сообщение # 7003
    почти ветеран
    Сейчас нет на сайте
    Цитата allods ()
    Нужно в скрипте прям в инспекторе все красиво расставить под Спойлеры, как это устроить

    Ни разу этого не видел. Если такое возможно, то мне тоже интересно ))

    Цитата allods ()
    Есть скрипт с Таблицей (List) всяких объектов состоящих из классов

    Здесь не понял... Разве можно сделать лист разных классов?


    King Size #Gamiron12
    allodsДата: Понедельник, 08 Июня 2015, 18:03 | Сообщение # 7004
    почти ветеран
    Сейчас нет на сайте
    Цитата NEBR ()
    Здесь не понял... Разве можно сделать лист разных классов?

    Не так выразился

    Там один класс но я уже разобрался с этим

    Но есть другой теперь вопрос

    Код
    if (inventory.Contains (dataBase.items [item]))   
        {
         inventory[].count+=1;
        }


    я проверяю есть ли этот объект в инвентаре, дальше мне надо прибавит к count +1
    но как узнать номер ячейки которая содержит мой итем , кроме как через For reach

    Добавлено (08 июня 2015, 18:03)
    ---------------------------------------------
    сделал так

    Код
    if (inventory.Contains (dataBase.items [item]))   
        {
         for (int i = 0; i < inventory.Count; i++)
         {
          if(inventory[i]==dataBase.items [item])
           inventory[i].count+=1;
         }
        }


    но может есть другой способ

    и есть проблема
    count меняется не только в этом скрипте но также и в скрипте со всеми вещами


    Сообщение отредактировал allods - Понедельник, 08 Июня 2015, 18:29
    berilДата: Вторник, 09 Июня 2015, 19:50 | Сообщение # 7005
    Я не ленивый, я — энергосберегающий
    Сейчас нет на сайте
    Цитата allods ()

    но может есть другой способ

    и есть проблема
    count меняется не только в этом скрипте но также и в скрипте со всеми вещами

    int i = inventory.IndexOf(dataBase.items [item]);




    Накодил? Убери за собой!
    Инвентарь в Unity(UI)
    Инвентарь в Unity(GUI)
    allodsДата: Вторник, 09 Июня 2015, 22:17 | Сообщение # 7006
    почти ветеран
    Сейчас нет на сайте
    Я блин не знаю как точней описать

    Есть инвентарь с листом Вещей, скажем он пуст

    Есть База вещей, другой скрипт

    Я беру предмет считываю ID если он есть в Базе вещей то Add()

    Можно как то тоже через Add или аналогично но не по каждой переменной ввести в Лист инвентаря если в Базе вещей такой вещи нет ?

    Исходя из того что все названия переменных одинаковые

    Код
    public class ItemStat   
    {

       public int IDitem;
       public string Name;
       public string Description;
       public float weight;
       public int Price;
       public int count=1


    это мой скрипт через который я создаю List Базы вещей меняя параметры

    есть аналогичный скрипт только с
    Код
    public class Item : MonoBehaviour
    {


    который я засуну на объект

    С него я считываю ID и если он есть в Базе то добавляю его в инвентарь из Базы

    Если на этом объекте ID не совпадает с Базой то добавить все переменные с этого Объекта в Инвентарь через Add или еще какой способ. Есть такой способ либо придется все копировать в ручную


    Сообщение отредактировал allods - Вторник, 09 Июня 2015, 22:18
    pixeyeДата: Вторник, 09 Июня 2015, 22:31 | Сообщение # 7007
    Red Winter Software
    Сейчас нет на сайте
    Цитата allods ()
    который я засуну на объект

    С него я считываю ID и если он есть в Базе то добавляю его в инвентарь из Базы

    Если на этом объекте ID не совпадает с Базой то добавить все переменные с этого Объекта в Инвентарь через Add или еще какой способ. Есть такой способ либо придется все копировать в ручную


    Из класса в чужой класс надежнее всего конечно вручную, но ты в корне неверно подходишь к своей проблеме. Ты очень сильно извращаешь логику.
    Относись к Item : Monobehaviour как игровому объекту, чья задача отобразить имеющуется дату.

    Для этого в public class Item : MonoBehaviour
    {

    public ItemStat itemData;

    public void INI(ItemStat itemData){
    this.itemData = itemData
    }

    }

    Чтобы редактировать значения ты будешь обращаться как (копия)Item.itemData.Name
    Дальше ты легко сможешь в массиве заменить по айдишнику эту дату на обновленную если в этом есть необходимость


    ACTORS - мой фреймворк на Unity
    Until We Die - игра над которой работаю



    Сообщение отредактировал pixeye - Вторник, 09 Июня 2015, 22:35
    pixeyeДата: Вторник, 09 Июня 2015, 22:32 | Сообщение # 7008
    Red Winter Software
    Сейчас нет на сайте
    Однако ты так не делаешь полагаю из за того что тебе хочется в инспекторе настраивать параметры вещи визуально и ты не знаешь как показать переменные из обычного класса в инспекторе. Это возможно.

    ACTORS - мой фреймворк на Unity
    Until We Die - игра над которой работаю

    allodsДата: Вторник, 09 Июня 2015, 23:37 | Сообщение # 7009
    почти ветеран
    Сейчас нет на сайте
    Дело в том что у предмета будет параметр который может измениться

    если я его поменяю в инвентаре то он измениться и в Базе вещей, мне хотелось бы просто создать измененную копию

    Добавлено (09 июня 2015, 23:35)
    ---------------------------------------------
    Я думаю просто отказаться от это Базы вещей и просто все вводить вручную

    Добавлено (09 июня 2015, 23:37)
    ---------------------------------------------
    inventory.Add(new ItemStat(6,"lol","troll",1.5f,62,ItemStat.ItemType.Armor,1));

    вот таким макаром

    Сообщение отредактировал allods - Вторник, 09 Июня 2015, 23:19
    pixeyeДата: Вторник, 09 Июня 2015, 23:58 | Сообщение # 7010
    Red Winter Software
    Сейчас нет на сайте
    Есть вариант глубого копирования, но сразу предупреждаю, что это не очень хорошая практика и подойдет только для простых классов с датой.

    Тебе потребуется библиотека JSON для юнити. Я пользуюсь этой, но можно и бедсптные аналоги найти https://www.assetstore.unity3d.com/en/#!/content/11347
    Пишешь в каком нибудь утилитарном скрипте этот метод.

    public static T CloneJson<T>(this T source)
    {
    if (Object.ReferenceEquals(source, null))
    {
    return default(T);
    }
    return JsonConvert.DeserializeObject<T>(JsonConvert.SerializeObject(source));
    }

    Теперь ты можешь копировать объекты.

    public List<ArrayTesting> testList = new List<ArrayTesting>();
    ArrayTesting data;
    void Start () {
    testList.Add(new ArrayTesting("Mike"));
    testList.Add(new ArrayTesting("Mike2"));
    testList.Add(new ArrayTesting("Mike4"));

    data = testList[0].CloneJson<ArrayTesting>();
    data.name = "John";
    И эта копия не повлечет изменений в листе.



    ACTORS - мой фреймворк на Unity
    Until We Die - игра над которой работаю



    Сообщение отредактировал pixeye - Среда, 10 Июня 2015, 00:11
    allodsДата: Среда, 10 Июня 2015, 00:13 | Сообщение # 7011
    почти ветеран
    Сейчас нет на сайте
    Спасибо за ответ
    nik3122Дата: Четверг, 11 Июня 2015, 19:06 | Сообщение # 7012
    почетный гость
    Сейчас нет на сайте
    как воспроизвести два звука (запуск двигателя и холостой ход) Например проиграл 1 звук после 2 звук

    Проект друзей: Lost World Online – хардкорная многопользовательская онлайн-игра по мотивам книги братьев Стругацких "Пикник на Обочине".
    EchoITДата: Четверг, 11 Июня 2015, 19:17 | Сообщение # 7013
    старожил
    Сейчас нет на сайте
    nik3122, audio.Play(), audio.isPlaying. Читай справку. smile

    Долгожданный анонсик: State of War
    allodsДата: Суббота, 13 Июня 2015, 13:11 | Сообщение # 7014
    почти ветеран
    Сейчас нет на сайте
    Нужно персонализировать скрипт

    Есть enum
    Нужно показывать нужные List в зависимости от enum

    Код
    public override void OnInspectorGUI() {
                serializedObject.Update ();
                   
                EditorGUILayout.PropertyField( state_Prop );
                   
                PropertyHolder.Status st = (PropertyHolder.Status)state_Prop.enumValueIndex;
                   
                switch( st ) {
                case PropertyHolder.Status.A:               
                    EditorGUILayout.PropertyField( controllable_Prop, new GUIContent("controllable") );               
                    EditorGUILayout.IntSlider ( valForA_Prop, 0, 10, new GUIContent("valForA") );
                    EditorGUILayout.IntSlider ( valForAB_Prop, 0, 100, new GUIContent("valForAB") );
                    break;
           
                case PropertyHolder.Status.B:               
                    EditorGUILayout.PropertyField( controllable_Prop, new GUIContent("controllable") );       
                    EditorGUILayout.IntSlider ( valForAB_Prop, 0, 100, new GUIContent("valForAB") );
                    break;
           
                case PropertyHolder.Status.C:               
                    EditorGUILayout.PropertyField( controllable_Prop, new GUIContent("controllable") );       
                    EditorGUILayout.IntSlider ( valForC_Prop, 0, 100, new GUIContent("valForC") );
                    break;
                       
                }
                   
                   
                serializedObject.ApplyModifiedProperties ();
            }


    Вот пример кода где показывается как это делается для всяких Стрингов Бикини Булок и прочих переменных
    Но как сделать это с List?

    я не могу найти нужного мне в EditorGUILayout
    -------------------------------------
    Все разобрался !!!!!!!!!!!!!!!!!!!!


    Сообщение отредактировал allods - Суббота, 13 Июня 2015, 14:14
    nik3122Дата: Понедельник, 15 Июня 2015, 21:37 | Сообщение # 7015
    почетный гость
    Сейчас нет на сайте
    Помогите не могу разобраться как воспроизвести два звука - проигрался первый звук сразу же за ним второй (я нуб а программировании)
    В google не нашол


    Проект друзей: Lost World Online – хардкорная многопользовательская онлайн-игра по мотивам книги братьев Стругацких "Пикник на Обочине".
    JaJaBinksДата: Вторник, 16 Июня 2015, 19:36 | Сообщение # 7016
    был не раз
    Сейчас нет на сайте
    Всем привет.
    У меня такая проблема с андройдом.
    Написал скрипт на javascript для перехода между сценами.
    НО на телефоне он не работает вопрос почему?
    P.s если запускаю на компе тобишь с игроком с компа то все работает.
    pixeyeДата: Вторник, 16 Июня 2015, 20:09 | Сообщение # 7017
    Red Winter Software
    Сейчас нет на сайте
    Цитата JaJaBinks ()
    Написал скрипт на javascript для перехода между сценами.
    НО на телефоне он не работает вопрос почему?
    P.s если запускаю на компе тобишь с игроком с компа то все работает.


    Скрипт в студию


    ACTORS - мой фреймворк на Unity
    Until We Die - игра над которой работаю

    JaJaBinksДата: Вторник, 16 Июня 2015, 20:20 | Сообщение # 7018
    был не раз
    Сейчас нет на сайте
    #pragma strict

    var level = 1;
    function OnTriggerEnter(col : Collider)
    {
    if(col.tag == "First Person Controls")
    {
    Application.LoadLevel(level);
    }
    }

    Добавлено (16 июня 2015, 20:20)
    ---------------------------------------------
    Так же еще один есть но оба на андройде не работают (а на компе работают)
    #pragma strict

    function Start () {

    }

    function Update () {

    }
    function OnTriggerEnter (other : Collider) {
    if (other.gameObject.name == "First Person Controller"){
    Application.LoadLevel(1);
    }
    }


    Сообщение отредактировал JaJaBinks - Вторник, 16 Июня 2015, 20:20
    pixeyeДата: Вторник, 16 Июня 2015, 20:23 | Сообщение # 7019
    Red Winter Software
    Сейчас нет на сайте
    Проверь стоит ли на объекте isTrigger, добавь ригидбоди и отключи на нем гравитацию

    Проверь по отдельности работает ли у тебя Application Load Level , метод триггера и проверку на тэг


    ACTORS - мой фреймворк на Unity
    Until We Die - игра над которой работаю

    JaJaBinksДата: Вторник, 16 Июня 2015, 20:43 | Сообщение # 7020
    был не раз
    Сейчас нет на сайте
    ЧТо значит проверка на тег?
    Поиск:

    Все права сохранены. GcUp.ru © 2008-2024 Рейтинг