Вопрос-[ответ] по 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, вот Ответ (первый сайт в списке, первый пост)
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. Читай справку.
Долгожданный анонсик: 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 |
был не раз
Сейчас нет на сайте
| ЧТо значит проверка на тег?
|
|
| |