|
Общие вопросы вопросы не попадающие ни в один из доступных разделов |
18.05.2015, 07:28
|
#2146
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Вопросы от новичка
Я боюсь у тебя это не получится, property может указывать на свойства нескольких объектов одновременно, т.к. в редакторе можно выделить сразу много объектов. Самый простой путь - преобразовать target к типу своего скрипта и все рисовать с помощью EditorGUI/EditorGUILayout для одного первого объекта. Но появится проблема с Undo/Redo.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
18.05.2015, 16:56
|
#2147
|
Знающий
Регистрация: 29.11.2010
Сообщений: 244
Написано 31 полезных сообщений (для 49 пользователей)
|
Ответ: Вопросы от новичка
Сообщение от pax
Я боюсь у тебя это не получится, property может указывать на свойства нескольких объектов одновременно, т.к. в редакторе можно выделить сразу много объектов. Самый простой путь - преобразовать target к типу своего скрипта и все рисовать с помощью EditorGUI/EditorGUILayout для одного первого объекта. Но появится проблема с Undo/Redo.
|
Но... target ведь у Editor, а не у PropertyDrawer-a? (
Да и Undo/Redo не нужен, а если понадобится, то его же можно вручную сделать
__________________
Intel Core i3-4005U (1.7 ГГц), 4 ГБ ОЗУ, nVidia GeForce 940M 4 ГБ, Win8.1
|
(Offline)
|
|
18.05.2015, 17:06
|
#2148
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Вопросы от новичка
Вручную сложно, а у Editor target это первый из targets
UPD: сорри я немного не понял сначала о чем речь. в PropertyDrawer никак не получить что рисуешь. Вроде кто-то пробовал через рефлексию. Но это геморрой еще тот.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
20.05.2015, 19:47
|
#2149
|
ПроЭктировщик
Регистрация: 02.10.2014
Сообщений: 102
Написано 5 полезных сообщений (для 25 пользователей)
|
Ответ: Вопросы от новичка
Подскажите ответ на такой вопрос:
Мне нужно чтобы можно было определять объект под мышкой, но при этом, чтобы никаких столкновений между объектами не происходило.
В блитце была возможность сделать так без вызова UpdateWorld.
А как такое организовать в юнити? Как выключить расчет столкновения у всего?
UPD: или если у меня нет ни одного fixedUpdate(), то никакие столкновения рассчитываться нигде никогда не будут ?
|
(Offline)
|
|
20.05.2015, 21:26
|
#2150
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Вопросы от новичка
Вешай на объекты Collider'ы с Rigidbody в режиме IsKinematic
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
21.05.2015, 11:42
|
#2151
|
Дэвелопер
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений (для 886 пользователей)
|
Ответ: Вопросы от новичка
Сообщение от ILonion
UPD: или если у меня нет ни одного fixedUpdate(), то никакие столкновения рассчитываться нигде никогда не будут ?
|
Наличие этой функции в твоём скрипте никак не повлияет на работу физики, она лишь позволяет тебе вклиниться в логику в момент обработки физики.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
21.05.2015, 18:10
|
#2152
|
ПроЭктировщик
Регистрация: 02.10.2014
Сообщений: 102
Написано 5 полезных сообщений (для 25 пользователей)
|
Ответ: Вопросы от новичка
Понятно..
Спасибо, pax, Жека!
|
(Offline)
|
|
21.05.2015, 21:36
|
#2153
|
ПроЭктировщик
Регистрация: 02.10.2014
Сообщений: 102
Написано 5 полезных сообщений (для 25 пользователей)
|
Ответ: Вопросы от новичка
Посоветуйте, пожалуйста, как поступить. Штука такая:
Образно: есть массив 3д объектов. Большое кол-во. Те, что находятся на расстоянии от камеры n, должны определяться мышкой, прочие - нет. Камера перемещается, соответственно и объекты подверженные лучу камеры меняются.
Каким образом эффективно включать\выключать у объектов коллайдеры? Я так понял, что только через getcomponent>collider.
Но вопрос в том, что "id' объектов постоянно меняются (перманентно instantiate и destroy делаются) и создать массив ссылок на коллайдеры перед запуском скрипта не получается.
В руководстве же, написано, что getcomponent (в свете производительности) хорошо бы использовать по-реже (что и смущает).
getcomponent на лету единственный способ в данном случае?
|
(Offline)
|
|
21.05.2015, 23:59
|
#2154
|
Знающий
Регистрация: 29.11.2010
Сообщений: 244
Написано 31 полезных сообщений (для 49 пользователей)
|
Ответ: Вопросы от новичка
Сообщение от ILonion
Посоветуйте, пожалуйста, как поступить. Штука такая:
Образно: есть массив 3д объектов. Большое кол-во. Те, что находятся на расстоянии от камеры n, должны определяться мышкой, прочие - нет. Камера перемещается, соответственно и объекты подверженные лучу камеры меняются.
Каким образом эффективно включать\выключать у объектов коллайдеры? Я так понял, что только через getcomponent>collider.
Но вопрос в том, что "id' объектов постоянно меняются (перманентно instantiate и destroy делаются) и создать массив ссылок на коллайдеры перед запуском скрипта не получается.
В руководстве же, написано, что getcomponent (в свете производительности) хорошо бы использовать по-реже (что и смущает).
getcomponent на лету единственный способ в данном случае?
|
Вешай на объекты компонент, который имеет поле myCollider, которое можно вручную назначать, или в Start-е Getcomponent выполнять
И в массиве держать ссылки имеено на этот компонент
Как-то так?
__________________
Intel Core i3-4005U (1.7 ГГц), 4 ГБ ОЗУ, nVidia GeForce 940M 4 ГБ, Win8.1
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
22.05.2015, 07:29
|
#2155
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Вопросы от новичка
У Physics.Raycast есть много параметров, задай дистанцию действия луча и не парься о включении/выключении колайдеров.
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
|
|
22.05.2015, 19:10
|
#2156
|
ПроЭктировщик
Регистрация: 02.10.2014
Сообщений: 102
Написано 5 полезных сообщений (для 25 пользователей)
|
Ответ: Вопросы от новичка
Спасибо, pax, так и сделаю!
ANIK123, спасибо, но предустановленный массив делать в моем случае нельзя - нет постоянных id объектов.
|
(Offline)
|
|
23.05.2015, 09:18
|
#2157
|
Знающий
Регистрация: 29.11.2010
Сообщений: 244
Написано 31 полезных сообщений (для 49 пользователей)
|
Ответ: Вопросы от новичка
Пытаюсь смастерить свой Dictionary, который умеет сериализироваться
[Serializable] public class DictionarySerializable<K, V> : IEnumerable<KVPSerializable<K, V>> { [SerializeField] protected List<KVPSerializable<K, V>> list = new List<KVPSerializable<K, V>>(); public int Count {get{return list.Count;}} protected void Add(K Key, V Value){ list.Add(new KVPSerializable<K, V>{Key = Key, Value = Value}); } public void Remove(K Key){ list.Remove(Find(Key)); } public V this[K Key]{ get {return Find(Key).Value;} set { bool finded = false; foreach (var v in list){ if (v.Key.Equals(Key)){v.Value = value; finded = true; break;} } if (!finded){Add(Key, value);} } } public KVPSerializable<K, V> Find(K Key){ foreach (var v in list){ if (v.Key.Equals(Key)){return v;} } throw new System.InvalidOperationException(); } public IEnumerator<KVPSerializable<K, V>> GetEnumerator(){ foreach (var v in list){ yield return v; } } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator(){ return this.GetEnumerator(); } } [Serializable] public class KVPSerializable<K, V> { public K Key; public V Value; }
EditorGUI.BeginChangeCheck(); foreach (var v in myTarget.dict){ .... v.Value.strength = EditorGUILayout.IntField(v.Value.strength); .... } if (EditorGUI.EndChangeCheck()){ EditorUtility.SetDirty(target); }
Но он не сериализируется (при запуске "игры" и при выходе с нее - данные сбрасываются)
Не могу понять где налажал
__________________
Intel Core i3-4005U (1.7 ГГц), 4 ГБ ОЗУ, nVidia GeForce 940M 4 ГБ, Win8.1
|
(Offline)
|
|
23.05.2015, 10:32
|
#2158
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Вопросы от новичка
Твой пример, это не словарь, а простой перебор. Нет никаких преимуществ поиска. Ведь словарь это хэш таблица.
И зачем тебе мастерить свой словарь, ведь можно сериализовать любой другой.
Вот готовый пример сериализации стандартного словаря:
http://docs.unity3d.com/ScriptRefere...rialize.h tml
Я обычно поступаю так:
using UnityEngine; using System.Collections.Generic;
public class Example: MonoBehaviour { [System.Serializable] public class DictionaryItem { public string key; public int value; }
public List<DictionaryItem> items;
public Dictionary<string, int> dic;
void Awake() { dic = new Dictionary<string, int>(); if(items!= null) { foreach(var item in items) dic[item.key] = item.value; } } }
И не надо писать никакие свои редакторы для типов.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
29.05.2015, 03:19
|
#2159
|
ПроЭктировщик
Регистрация: 02.10.2014
Сообщений: 102
Написано 5 полезных сообщений (для 25 пользователей)
|
Ответ: Вопросы от новичка
Доброго времени!
Такой вопрос:
луч должен возвращать компонент объекта в сцене - скрипт, и из него метод, но при попытке запуска юнити говорит, что ссылается не на экземпляр (Object reference not set to an instance of an object):
hit.collider.GetComponent<xcalss>().xmethod();
энное кол-во объектов в сцене со скриптом с классом xclass.
как быть в данном случае?
нужно запускать методы xmethod().
|
(Offline)
|
|
29.05.2015, 06:56
|
#2160
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Вопросы от новичка
Вот так
var component = hit.collider.GetComponent<xcalss>(); if(component) component.xmethod();
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 08:02.
|