|
Общие вопросы вопросы не попадающие ни в один из доступных разделов |
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, время: 03:14.
|