![]() |
Ответ: Вопросы от новичка
Цитата:
Посмотри тут как это нужно делать правильно: http://gamecreatingcommunity.ru/forum/59-5419-1 ЗЫ: если уж совсем никак не переделать - удочеряй пустому ГО и верти его |
Ответ: Вопросы от новичка
Цитата:
OnGUI за кадр вызывается несколько раз. Если используется Layout, то сначала с событием Event.layout, затем с событиями типа mouseDown. В конце с событием repaint. Если внутри OnGUI используются некие переменные, управляемые извне и вывод GUI зависит от этих переменных, то Юнити боится, что может возникнуть ошибка вывода и выдает сама такую ошибку. Кода Вашего нет, так что придется разбираться Вам самому - верно это или нет. |
Ответ: Вопросы от новичка
seaman, да там с кодом все странно. Изменяю его в одном месте, а ошибка в другом.
Вот не пойму почему GUILayoutUtility.GetAspectRect( items.Length, GUILayout.MaxHeight(64) ); Возвращает квадрат с высотой больше, чем 64? |
Ответ: Вопросы от новичка
Вопрос по сохранению игры - каким образом лучше делать сохранение игры для следующих двух вариантов:
1- легкий случай, требуется запомнить только счет и номер уровня ( при загрузке уровень или сцена всегда начинается с начала) 2- тяжелый случай, требуется запоминать положение и состояние объектов на сцене и при загрузке их полностью восстанавливать для продолжения игры с текущего момента. Что посоветуете? |
Ответ: Вопросы от новичка
1. Самое простое - PlayerPrefs
2. Тут универсального решения нет. Придется что-то свое изобретать. |
Ответ: Вопросы от новичка
Еще вопросик - можно ли делать картинку на мониторе сразу с двух камер: первая камера с перспективной проекцией дает 3Д вид объектов, а вторая камера с орто-проекцией накладывает на этот вид спрайты (окошки) типа карты и т.п. ( возможно с альфа-каналом ) ?
|
Ответ: Вопросы от новичка
Да можно. Добавь две камеры в сцену. Настрой их порядок рендеринга (для управления порядком камер используй параметр Depth), второй камере задай Clear Flags - Depth. Потом в Culling Mask укажи какие слои рендерит каждая камера.
|
Ответ: Вопросы от новичка
Нужно нарисовать N картинок в ряд. Для этого я сразу же выделяю большой квадрат под все картинки. Если под каждую выделять, то между ними могут получится пробелы.
Выделяю так GUILayoutUtility.GetRect(items.Length*64, 64); Но вот проблема при шести картинках выделяется большая область и инспектор уходит под полосу прокрутки. Вот не пойму как выделить rect, чтобы он был не шире окна+полосы прокрутки, и не выше, Чем 64? Вчера провозился, но либо items.Length == 6 лезет под полосу, либо при items.Length < 6 высота картинок очень большая. Еще и хотелось бы, чтобы эти картинки рисовались по среди окна, но GUILayout.FlexibleSpace() сжимает их до нулевого размера. |
Ответ: Вопросы от новичка
Цитата:
http://whydoidoit.com/unityserializer/ |
Ответ: Вопросы от новичка
Вложений: 1
На объект с именем 1 повешан скрипт следующего содержания:
PHP код:
Ошибка: NullReferenceException: Object reference not set to an instance of an object FlipNormal.Start () (at Assets/Scripts/FlipNormal.cs:10) на строке Mesh m = GetComponent<MeshFilter>().mesh; Что не верно? Как можно вывернуть нормали у анимированной модели? |
Ответ: Вопросы от новичка
Попробуй так:
PHP код:
|
Ответ: Вопросы от новичка
Отчасти разобрался со своим прошлыми вопросом.
Вот так все работает. Квадрат не уходит под полосу прокрутки, высотой не превышает 64 и размещен по средине, если меньше ширины окна. Код:
GUILayout.BeginHorizontal(); Если без него, то FlexibleSpace сожмут квадрат с обеих сторон до нулевого размера. Если бы MinWidth задавал, то понятно. |
Ответ: Вопросы от новичка
Вложений: 1
Снова похожая проблема. Toolbar не умещается и растягивает весь инспектор.
Можно сделать, чтобы он не растягивал gui? |
Ответ: Вопросы от новичка
Ты наверняка задал им фиксированную или минимальную ширину, они бы поместились. А так - выдели область по высоте и рисуй с помощью GUI, тогда лайоут не испортишь, либо скролл добавь.
|
Ответ: Вопросы от новичка
Вложений: 1
Так работает)
Код:
Rect rect = GUILayoutUtility.GetRect(GUIContent.none, GUI.skin.button, GUILayout.MaxWidth(64*items.Length)); |
Ответ: Вопросы от новичка
Привет всем!
Изучаю встроенную сеть в Unity3D. Возник тут очень мучающий меня вопрос. Как правильно инстанцировать и удалять объект по сети? Создаю сейчас объект так: networkView.RPC("Spawn", RPCMode.AllBuffered, AllocateViewID()); Удаляю так: networkView.RPC("Destroy", RPCMode.AllBuffered, viewID); Тела функций: [RPC] void Spawn(NetworkViewID viewID) { GameObject go = Instantiate(someObj, pos, rot) as GameObject; go.networkView.viewID = viewID; } [RPC] void Destroy(NetworkViewID viewID) { Network.RemoveRPCs(viewID); Network.Destroy(viewID); } Но! Это неправильно. Если делать так, то при вызове этой функции у клиента, сервер получает ошибки: View ID AllocatedID: XXX not found during lookup. Strange behaviour may occur. Couldn't destroy object because the associate network view was not found Если же вызвать это на сервере, то такую же ошибку получит клиент. Если же написать так: void Destroy(NetworkViewID viewID) { if (viewID.isMine) { Network.RemoveRPCs(viewID); Network.Destroy(viewID); } } , то тогда новый подключенный клиент видит "убитый" объект. То есть, он создается, но не удаляется. Тоже не то. Как тогда надо писать? |
Ответ: Вопросы от новичка
А при создании не проще пользоваться Network.Instantiate ?
А в остальном я мало имею опыта с Unity сетью, Photon Unity Networking создает объекты сам и удаляет тоже. |
Ответ: Вопросы от новичка
Да вот, как оказалось, не проще.
Network.Instantiate записывается в RPC-буфер не конкретного NetworkViewID, а самого NetworkPlayer'а. В результате чего, чтобы удалить потом этот объект из сети (при этом, чтобы у новых подключившихся игроков этот объект не создавался), придется либо очищать весь RPC-буфер игрока (а не какого-то NetworkViewID, что было бы более приятней), либо добавлять еще один дополнительный NetworkViewID, чтобы он этот объект "доубивал" при его создании на новых подключенных клиентах. Короче, очень, очень плохо, что в Unity3D нельзя смотреть и редактировать RPC-буфер любого NetworkViewID и NetworkPlayer'ов. Только глобально очищать. Пипец, хоть свою систему RPC-буферов с нормальным редактированием пиши! На кой черт она тогда нужна в Unity? |
Ответ: Вопросы от новичка
Всем привет! Пытаюсь сделать фуллскрин используя масштаб. Но что-то не то. По стандарту разрешение 807х570. Разрешение в фуллскрине 1366х768 (в моем случае). У билда выставил разрешение экрана 1366х768. Дальше читаю масштаб:
Код:
float size_width = Screen.width / 807; Код:
Debug.Log ("size_width: " + size_width + "; size_heigh: " + size_height); |
Ответ: Вопросы от новичка
Оу. Я разобрался. В конце нужно цифр нужно было просто поставить f.
|
Ответ: Вопросы от новичка
Это поразительно, но так все работает
GUILayout.Toolbar(selected, items, GUILayout.MinWidth(0)) Вообще не представляю как тут GUILayout.MinWidth(0) может помогает)) Странное у них GUI. Иначе GUI растянется даже за пределы экрана, не говоря уже о полосе прокрутки, но это только когда рисуется полоса прокрутки. |
Ответ: Вопросы от новичка
Кто-нибудь пользовался классом DragAndDrop?
Не пойму как сделать, чтобы с чужих окон нельзя было перетаскивать объекты в мое окно? А так же я так понимаю вызывать DragAndDrop.StartDrag нужно в событии MouseDrag. Но не пойму нужно ли и как проверить, что уже Drag уже начался? |
Ответ: Вопросы от новичка
Вопрос. Делаю префаб, загружаю его:
GameObject wood = (GameObject)Instantiate(Resources.Load("Prefabs/wood", typeof(GameObject))); префаб загружается розовый, без материала. Материал надо в скрипте добавлять? ПС Префаб сделан с материалом |
Ответ: Вопросы от новичка
Какой 3d max лучше скачать под юнити и по какому больше всего уроков можно найти ?
|
Ответ: Вопросы от новичка
Цитата:
Цитата:
|
Ответ: Вопросы от новичка
Цитата:
|
Ответ: Вопросы от новичка
Цитата:
|
Ответ: Вопросы от новичка
Вот нашел. :-D
Цитата:
|
Ответ: Вопросы от новичка
Думаю тебе эти компоненты не нужны
|
Ответ: Вопросы от новичка
а можно ли использовать transform.Translate на 3rd Person Controller? Или его как-то по другому двигать можно?
|
Ответ: Вопросы от новичка
Почему Блиц даёт 100 - 110 кадров, а юнити 40 - 45
Дравколов в юнити ~75 Сцены аналогичные, что можно слито в один меш, что нельзя то отдельные ентити. Так же и в блице. Разница в том что бамп в юнити через материал а в блице через dot3 |
Ответ: Вопросы от новичка
Профайлер посмотри, что больше жрет ресурсов. Window => Profiler
Плюс еще факторы - источники света, тени, постэффекты. |
Ответ: Вопросы от новичка
Профайлер Pro only а у меня free:(
А вообще на одинаковой сцене юнити быстрее должен быть? |
Ответ: Вопросы от новичка
Все зависит от настроек, может что-то у тебя не так там. Может скрипты сложные. Если например выбирал паралакс шейдеры, то они тяжелые. Сколько источников света? Какие тени? Были ли тени в блице? Какое освещение? В блице повершинное, тут по умолчанию пиксельное. Плюс FPS редактора отличается от FPS билда. Посмотри и там и там.
|
Ответ: Вопросы от новичка
В папке Resources\Prefabs у меня лежит префаб.
Он не добавлен в сцену, а добавляется по ходу выполнения главного скрипта. К этому префабу добавлен скрипт, который будет управлять этим префабом. Этот скрипт должен знать об объектах, которые были добавлены в сцену до запуска(в редакторе). Как это сделать?? Назначить переменную и перетащить на неё объект не получается, т. к. префаб попадает в сцену после запуска. В итоге мне нужно: Допустим есть игрок. Он идёт вперёд. Доходит до места икс. Загружается противник. И противник ЗНАЕТ где стоит игрок!!! Неужели для этого нужно добавлять в сцену всё подряд??? |
Ответ: Вопросы от новичка
Способы:
1. Пометить игрока тегом Player, найти объект по тэгу. 2. Если у игрока специфический компонент, то можно найти компонент по типу (FindObjectOfType) 3. Компонент игрока записывает ссылку на себя в статическую переменную, все кому надо читают эту переменную. 4. У объекта игрока специфическое имя, можно найти объект по имени. Я чаще всего пользуюсь 2 и 3 |
Ответ: Вопросы от новичка
Цитата:
|
Ответ: Вопросы от новичка
PHP код:
PlayerController.instance.Life -= 5; |
Ответ: Вопросы от новичка
Всем привет! Я по поводу сортировки массива. Пытаюсь сортировать массив вот так:
Код:
public class Data { Цитата:
Цитата:
|
Ответ: Вопросы от новичка
data_sort = data.OrderBy (t=>int.Parse (t.param2??"0")).ToArray ();
|
Ответ: Вопросы от новичка
Цитата:
|
Ответ: Вопросы от новичка
Оказалось что сортировка происходит - http://ideone.com/IdMyuR.
|
Ответ: Вопросы от новичка
Полоса прокрутки вообще страшная штука. С ней даже Space(2) может сделать отступ в 1 пиксель)
Я вот заметил, что мой сериализованный список сохраняется лишь в сцене. После Revert из префаба все объекты списка не созданы т.е. просто null. Объекты мои унаследованы от юнитивского Object. Почему так может происходить? Создаю их так: ScriptableObject.CreateInstance(type) Храню так: [SerializeField] private List<Block> blockSet = new List<Block>(); |
Ответ: Вопросы от новичка
А в префабе объекты есть?
ну а вообще ScriptableObject в ассетах надо сохранять как *.asset |
Ответ: Вопросы от новичка
pax, видно в префаб и не сохраняется список.
У меня не ScriptableObject, а просто Object. Создавать на каждый объект ассет будет очень не удобно. Нужно в одном списке хранить. В сцене все нормально сохраняется. |
Ответ: Вопросы от новичка
Они только в сцене и сохраняются таким образом, а какой в этом толк? Классы с Serializable атрибутом прекрасно сохраняют списки на префабах.
|
Ответ: Вопросы от новичка
pax, у меня полиморфизм. Обычные классы не сохранялись.
Блин! Даже не знаю что теперь делать( Я сейчас уже даже не уверен, что я правильно создавал свои объекты. Эта перегрузка CreateInstance<T>() where T: ScriptableObject Позволяет создавать только наследники ScriptableObject. В той перегрузки, которой я пользовался ScriptableObject CreateInstance(Type type) нет такой проверки. А если просто через new создавать, то почему-то ничего не создается т.е. null возвращается. Даже не знаю как это сделано без выбрасывания исключений. В некоторых языках есть фабричные конструкторы, которые могут возвращать черт знает что. В C# о таком не слышал. |
Ответ: Вопросы от новичка
Вложений: 1
Ну ладно, попытаюсь вешать все ScriptableObject на один ассет.
Создаю этот ассет из объекта List(:ScriptableObject), все нормально. Код:
List list = ScriptableObject.CreateInstance<List>(); Код:
AssetDatabase.AddObjectToAsset(newObject, list); Мой New List перемещается вглубь иерархии, а рутовым остается какая-то пустышка с тем же именем New List. Почему так? |
Ответ: Вопросы от новичка
Не мучайся и создавай отдельные ассеты, если они действительно нужны. Как ты потом будешь удалять из такого ассета объекты?
|
Ответ: Вопросы от новичка
pax, да, удаление объекта тоже вопрос. Точнее я не понял как получить список объектов у ассета, чтобы их потом удалить. Хотя они все равно хранятся в моем списке.
Я делаю список блоков для моего MineCraft. Сейчас так все просто и красиво в инспекторе редактируется. На каждый блок создавать ассет, ну совсем не гуд. Впрочем все равно хотел, чтобы blockset можно было создавать и загружать из вне. Вообщем придется делать своим xml форматом. Жаль только для своего формата инспектор не сделаешь. Придется либо окно редактора создавать, либо блокнотом редактировать) А сделать загрузчик для своего формата нельзя? Чтобы файл преобразовывался в юнитивский объект, как шрифт. Может в Unity 4 так уже можно? Подумывал BlockSet писать кодом) Как в MineCraft ModLoader'е. Но тогда из вне уже сложно будет загрузить т.к. придется сначала этот код компилировать. Да и координаты текстурные вручную писать придется. И загрузка таких кодов может быть довольно опасной. Или можно ограничить возможности этого стороннего кода? |
Ответ: Вопросы от новичка
Сделаешь инспектор, это TextAsset, можешь для него сделать инспектор свой. С четверкой не работал, поэтому не знаю, в третей не слышал, но может можно...
|
Ответ: Вопросы от новичка
Цитата:
Код:
AssetDatabase.CreateAsset(list, "Assets/New List.asset"); Код:
AssetDatabase.AddObjectToAsset(newObject, list); Код:
list.name = "New List"; Цитата:
|
Ответ: Вопросы от новичка
Цитата:
AssetPostprocessor.OnPostprocessAllAssets ЗЫ: плохо, что инспектор для своих объектов делать нельзя :( Вот например импорт xml описания атласа шрифта: Код:
using UnityEditor; |
Ответ: Вопросы от новичка
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Pax говорил, что в 4 версии уже можно так делать. |
Ответ: Вопросы от новичка
Цитата:
Цитата:
Код:
[CustomEditor(typeof(TextAsset))] Хотя может я на ночь глядя туплю. |
Ответ: Вопросы от новичка
да, примерно так я и предлагал, так я делал для Antares Universe
|
Ответ: Вопросы от новичка
seaman, определить мой ли файл несложно. Но если файл не мой, то не знаю как переключится на следующий TextAsset редактор или на дефолтный.
Если в проекте будет несколько таких TextAsset редакторов, то работать будет только один. Не понял о чем ты говорил, что нельзя. |
Ответ: Вопросы от новичка
Вообще для этого есть DrawDefaultInspector(); Но тут он не помогает. Не показывается текст обычного текстового файла после своего инспектора.
Цитата:
|
Ответ: Вопросы от новичка
Интересно, что инспектор текстуры расширить не так просто.
[CustomEditor(typeof(Texture))]не работает Работает так: [CustomEditor(typeof(TextureImporter))] Но при этом инспектор, естественно, выглядит совершенно не стандартно. |
Ответ: Вопросы от новичка
Вот это сообщение в котором pax писал, что в 4й версии уже можно делать инспектор для поля.
Цитата:
В документации лишь вывод в консоль написали http://docs.unity3d.com/Documentatio...AllAssets.html |
Ответ: Вопросы от новичка
Цитата:
|
Ответ: Вопросы от новичка
Текстура импортируется этим классом http://docs.unity3d.com/Documentatio...tImporter.html
Спасибо рефракторингу. Может и свой формат так же можно загрузить. Я не знаю как с программированием редактора дела обстоят в UDK и CRYENGINE, но расширяемость юнити ограничивается фактически возможностью создания своего инспектора. UPDATE Погуглив на тему AssetImporter мне кажется, что поддержку своего формата не сделаешь. А метод который возвращает AssetImporter для файла AssetImporter.GetAtPath наверно работает фиксировано и кастомизации не подлежит. Странно, но его пометили как extern и вынесли куда-то реализацию. |
Ответ: Вопросы от новичка
Цитата:
В Юнити куча классов наследующих AssetImporter. Точно так же ты можешь наследовать AssetImporter и сделать свой импортер своего файла. Но если AssetImporter.GetAtPath работает неверно (нужно проверить) то лучше делать как я написал - переопределять AssetPostprocessor. |
Ответ: Вопросы от новичка
Посмотрел я все это. Ну неудобно расширять инспектор. Для своих объектов нельзя делать без жуткого геморроя. Если переделывать существующие то вывести стандартный без геморроя тоже не получится. OnPreviewGUI до сих пор не работает.
Единственное для чего он нормально работает - настройка своих компонентов (скриптов наследованных от монобех и повешенных на ГО). Для всего остального значительно проще писать свое окно редактора. |
Часовой пояс GMT +4, время: 23:48. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot