forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Unity (http://forum.boolean.name/forumdisplay.php?f=144)
-   -   Фак по Юнити. (http://forum.boolean.name/showthread.php?t=12966)

Amatsu 08.11.2011 22:12

Ответ: Фак по Юнити.
 
Цитата:

Сообщение от pax (Сообщение 208926)
Глупая контора

Не сказал бы
Pax, а как бы ты решил задачу? : нужно создать болванку модели, не отображающуюся в проекте как добавленный объект. То есть не как в блитце - грузим модель, хайдим, а потом CopyEntity. Модели не должно быть в сцене вообще, она должна быть загружена лишь в память один раз. А после этого нужно делать ее инстансы.

pax 08.11.2011 22:27

Ответ: Фак по Юнити.
 
Создать из модели префаб, назначить скрипту на переменную как сказал Lestar
В сцене сделать пустой объект со скриптом респавна. Этот скрипт будет создавать модель в нужном месте с помощью функции Instantiate(). В общем смотри пост №571

Lestar 08.11.2011 22:38

Ответ: Фак по Юнити.
 
Вложений: 1
Делим все ассеты на группы.Для каждой группы делаем своего родителя отвечающего за загрузку и выгрузку обьектов.Для всех родителей делаем один Main обьект,который будет ими управлять.По делфолту в сцене находится один единственный обьект Main. После запуска сцены загружаются полностью все обьекты и согласно логике необходимости не нужные отправляем в пулл ,по необходимости достаем и убираем .Если уж сильно печет можно Main обьект грузить из ресурсов.

Amatsu 08.11.2011 23:02

Ответ: Фак по Юнити.
 
Спасибо за совет... у меня последний на сегодня вопрос, если не сложно - ответьте пожалуйста:
Вот я создал в редакторе префаб, закинул его в созданную папку Prefabs и назвал его fighter_model
Теперь мне в главном скрипте, не привязанном компонентом к этому префабу, нужно найти этот префаб и создать его инстанс.
Код в посте №571, как я понял, работает если для префаба писать свой скрипт, что мне делать сейчас не хотелось бы.

pax 08.11.2011 23:23

Ответ: Фак по Юнити.
 
В главном скрипте создай переменную GameObject типа, публичную. В редакторе появится поле для назначения префаба или другого нужного объекта (это готовая ссылка на объект, находящийся в сцене или ресурсах, смотря что назначить). Назначь свой перфаб этой переменной в редакторе. Дальше с ним делай в главном скрипте что нужно. Пример, все тот же скрипт от Lestar'а. Считай что это главный скрипт.

Тут вообще система какая - Unity собирает в проект ресурсы по зависимостям. Если есть ссылки на объекты ресурсов в открытых переменных скриптов, то эти ресурсы погружаются автоматом при старте сцены, а следовательно включает в конечный билд. А папку Resources Unity подгружает в билд полностью, даже если есть ресурсы ни разу не использовавшиеся.

Amatsu 10.11.2011 15:28

Ответ: Фак по Юнити.
 
Опять застрял.
В общем, функции Sin и Cos в Блитце работают с угловым значением (90, 180, 360 и т.д.).
А вот в C# функции Mathf.Sin в Mathf.Cos при изменении угла от 0 до 360 выдают какие-то дикие значения, постоянно скачущие (например если изменять угол от 0 до 90 значение синуса несколько раз изменится от 0 до 1). В чем может быть проблема?

Все, решил проблему. Нужно было сделать угол в пределах от -180 до 180 (то есть отнять от угла поворота модели 180), потом умножить на Pi и разделить на 180. Усе работает, спасибо

Lestar 10.11.2011 16:06

Ответ: Фак по Юнити.
 
Mathf.Cos и Sin возвращают радианы.

h1dd3n 10.11.2011 16:15

Ответ: Фак по Юнити.
 
Sin возвращает радианы?oO

Lestar 10.11.2011 16:23

Ответ: Фак по Юнити.
 
http://unity3d.com/support/documenta...Mathf.Sin.html Документация иногда спасает от лишних вопросов.

Amatsu 10.11.2011 16:28

Ответ: Фак по Юнити.
 
Цитата:

Сообщение от Lestar (Сообщение 209166)
Mathf.Cos и Sin возвращают радианы.

Не, возвращают они значение от 0 до 1, то есть компоненту вектора по осям координат. А вот обрабатывают они значение не в градусах, а в радианах

h1dd3n 10.11.2011 17:39

Ответ: Фак по Юнити.
 
Returns the sine of angle f in radians.
Угол f в радианах. Радианы - !мера угла!. Sin возвращает значение, которое углом не является.

pax 10.11.2011 20:34

Ответ: Фак по Юнити.
 
Примеры перевода из радиан в градусы и обратно:
Mathf.Deg2Rad
Mathf.Rad2Deg
С использованием констант.

Aikon 11.11.2011 22:04

Ответ: Фак по Юнити.
 
Lestar, не возвращают радианы, а работают с радианами, а не градусами. Возвращают они разумеется числа от -1 до 1.

Amatsu, Пи(=3.14...)/2 радиан - это угол 90 градусов. Пи радиан - это 180 градусов.

pax, знание Unity освобождает от знания школьной математики :)

pax 12.11.2011 17:19

Ответ: Фак по Юнити.
 
Я вот тут подумываю сделать тему, в которой сделать таблицу соответствия команд блица и как такое на Unity сделать... Есть желающие помочь?

Amatsu 12.11.2011 17:46

Ответ: Фак по Юнити.
 
Цитата:

Сообщение от pax (Сообщение 209389)
Я вот тут подумываю сделать тему, в которой сделать таблицу соответствия команд блица и как такое на Unity сделать... Есть желающие помочь?

Помочь - нет, бо сейчас только изучаю Юнити. А вот еслиб такая появилась - почитал бы обязательно.

Amatsu 12.11.2011 21:17

Ответ: Фак по Юнити.
 
Сейчас перешел к спрайтам. Подскажите, в юнити есть какой-нить класс спрайта в 3д пространстве, или его нужно создать из двух полигонов и одной текстуры?

pax 12.11.2011 21:21

Ответ: Фак по Юнити.
 
Смотря для чего они нужны. Как таковых спрайтов нету, есть частицы.

Amatsu 12.11.2011 21:27

Ответ: Фак по Юнити.
 
Цитата:

Сообщение от pax (Сообщение 209425)
Смотря для чего они нужны. Как таковых спрайтов нету, есть частицы.

Частицы пока не нужны. Ясно, спасибо, тогда через плоскости сделаю

pax 12.11.2011 21:33

Ответ: Фак по Юнити.
 
Частицы по разному можно использовать ;)

Amatsu 12.11.2011 22:08

Ответ: Фак по Юнити.
 
Подскажите. Создал GameObject, загрузил в него текстуру. А есть ли в Юнити какой-нибудь аналог флага FullBright из Блитца? Бо сам диффузный материал белого цвета, но все равно спрайт освещается

Все, сам нашел как программно выбирать шейдеры. Поставил Unlit\Texture

pax 12.11.2011 22:44

Ответ: Фак по Юнити.
 
Цитата:

Сообщение от Amatsu (Сообщение 209431)
Подскажите. Создал GameObject, загрузил в него текстуру. А есть ли в Юнити какой-нибудь аналог флага FullBright из Блитца? Бо сам диффузный материал белого цвета, но все равно спрайт освещается

Все, сам нашел как программно выбирать шейдеры

Проверь в билде, часто бывает что в билде шейдеры не находит, а в редакторе работает нормально.
Если в билде не работает, то вероятно стоит создать материал и передать скрипту.

Amatsu 12.11.2011 23:13

Ответ: Фак по Юнити.
 
Так я материал и создаю кодом.
Вот сейчас вопрос, для другого спрайта выбрал шейдер Particles/Additive. Как бы мне программно поменять ему параметр альфы? Не маски, а именно прозрачности всего спрайта. В параметрах материала в редакторе у шейдера такой пункт есть (в настройках цвета, канал "а"). Но мне нужно менять альфу в процессе игры. Никак не могу получить доступ к этому параметру

Lestar 12.11.2011 23:22

Ответ: Фак по Юнити.
 
Через mesh.colors.

pax 12.11.2011 23:43

Ответ: Фак по Юнити.
 
Color color = material.color
color.a = 0.5f;
material.color = color;

Amatsu 13.11.2011 00:09

Ответ: Фак по Юнити.
 
Через mesh.color не получалось, видимо шейдер накладывал свою альфу.
Получилось через
mesh.renderer.material.SetColor("_TintColor", new Color32(255, 255, 255, 50));

Lestar 13.11.2011 00:40

Ответ: Фак по Юнити.
 
PHP код:

mesh meshFilter.mesh;
colors = new Color[mesh.vertexCount];
for (
int i 0colors.Lengthi++)
  {               
    
colors[i].0.5f;
  }
mesh.colors colors;
meshFilter.mesh mesh


Amatsu 16.11.2011 01:06

Ответ: Фак по Юнити.
 
Доброй ночи. Не могу нигде найти пример создания и активации системы партиклов кодом на C#, динамически, не прибегая к визуальному редактору. Если кто знает годный пример - подскажите плиз

Lestar 16.11.2011 02:23

Ответ: Фак по Юнити.
 
http://unity3d.com/support/resources...sion-framework Зачем все делать вручную ,если можно предподготовить и затем рулить параметрами.
По дефолту создаем gameObject ,далее добавляем ему компоненты ParticleEmitter ,ParticleAnimator ,ParticleRenderer. Проходимся по всем полям,настраиваем систему частиц.

pax 16.11.2011 07:10

Ответ: Фак по Юнити.
 
ParticleEmitter.emit

RegIon 16.11.2011 18:51

Ответ: Фак по Юнити.
 
Характерконтролёр не умеет двигать физ объекты,почему:''((?

Nex 16.11.2011 19:36

Ответ: Фак по Юнити.
 
Цитата:

Сообщение от Костян (Сообщение 209983)
Характерконтролёр не умеет двигать физ объекты,почему:''((?

http://www.unifycommunity.com/wiki/i...ysicsFPSWalker
Вешай этот скрипт только добавь Rigidbody и коллидер.

RegIon 16.11.2011 19:46

Ответ: Фак по Юнити.
 
Куда вешать,заместо Motion?

pax 16.11.2011 21:09

Ответ: Фак по Юнити.
 
Вложений: 1
Пакадж в аттаче

Amatsu 16.11.2011 21:53

Ответ: Фак по Юнити.
 
Столкнулся с проблемой - создал эмиттер кодом
Код:

engine_emitter_l = new GameObject("engine_emitter_l");
engine_emitter_l.AddComponent("EllipsoidParticleEmitter");
engine_emitter_l.AddComponent("ParticleAnimator");
engine_emitter_l.AddComponent("ParticleRenderer");
engine_emitter_l.transform.parent = model.transform.Find("engine_l");
engine_emitter_l.renderer.material.shader = Shader.Find("Particles/Additive");
engine_emitter_l.renderer.material.SetTexture("_MainTex", trail_tex);
engine_emitter_l.particleEmitter.minSize = 0.2F;
engine_emitter_l.particleEmitter.maxSize = 0.2F;
engine_emitter_l.particleEmitter.minEnergy = 1F;
engine_emitter_l.particleEmitter.maxEnergy = 1F;
engine_emitter_l.particleEmitter.minEmission = 50F;
engine_emitter_l.particleEmitter.maxEmission = 50F;
engine_emitter_l.particleEmitter.localVelocity = new Vector3(0, 0, 1F);
engine_emitter_l.particleEmitter.emitterVelocityScale = 0.1F;

Все настроил. Но никак не могу найти, где изменить параметры Ellipsoid скриптом. Подскажите плиз. Если решения нет, придется вручную писать свою систему частиц как на блитце :/

Сейчас нагуглил, что это недоработка юнити и возможность изменять размер элипса кодом (например для анимации источника партиклов) авторы все никак не запилят аж с 2009 года
Как вариант, народ предлагает вместо элипса использовать в качестве эмиттера меш и скейлить его. Подскажите плиз, как мне изменить код под меш-эмиттер

pax 16.11.2011 22:22

Ответ: Фак по Юнити.
 
Не понимаю зачем все создавать кодом? Чую никак кодом не создать. Вобщем выход - префаб с меш эмиттером, либо ждать Unity 3.5. Там будет новая система частиц - Shuriken.
Еще вариант - создавать частицы вручную изменяя свойство particles. Но накладно по расходу памяти и будет пахать сборщик мусора - это самый простой выход.

Amatsu 16.11.2011 22:25

Ответ: Фак по Юнити.
 
Цитата:

Сообщение от pax (Сообщение 210017)
Не понимаю зачем все создавать кодом?

Предвидел этот уже избитый вопрос - даже если я создам эмиттер в редакторе, мне нужно в игре менять размер источника динамически, то есть в любом случае хотя бы одну строчку кода, но придется написать, и именно ту, которая щас не работает. Так что не катит вариант "сделать через менюшку".
Пойду гуглить примеры работы с меш-эмиттером

pax 16.11.2011 22:30

Ответ: Фак по Юнити.
 
Меш эмиттер кодом не создать.

Amatsu 16.11.2011 23:06

Ответ: Фак по Юнити.
 
Цитата:

Сообщение от pax (Сообщение 210021)
Меш эмиттер кодом не создать.

Неужели для GameObject нельзя добавить кодом меш в MeshFilter?

pax 16.11.2011 23:56

Ответ: Фак по Юнити.
 
Можно.
GetComponent<MeshFilter>().mesh = myMesh;
ток не знаю чем тебе это поможет...

Amatsu 17.11.2011 11:24

Ответ: Фак по Юнити.
 
Спасибо, не помогло. То есть я создал MeshFilter, но эта команда не прикрепляет к нему меш. Потом при компиляции в мешфильтре все равно стаит параметр None вместо меша.

Вопрос - если я хочу сделать эмиттер, мне нужно в сцене создать хотя бы один полигон, привязать к нему эмиттер, настроить, а потом этот го захайдить, и инстансировать при необходимости в нужных местах сцены?

pax 17.11.2011 11:53

Ответ: Фак по Юнити.
 
Хайдить его не надо, из него надо сделать префаб (в проекте, не в сцене) - объект для копирования. Потом из ресурсов или по ссылке создавай.

Amatsu 17.11.2011 12:05

Ответ: Фак по Юнити.
 
Цитата:

Сообщение от pax (Сообщение 210062)
Хайдить его не надо, из него надо сделать префаб (в проекте, не в сцене) - объект для копирования. Потом из ресурсов или по ссылке создавай.

А вот это классно, спасибо. Пойду гуглить префабы

pax 17.11.2011 12:14

Ответ: Фак по Юнити.
 
Вот тебе вариант решения:
PHP код:

using UnityEngine;

public class 
TestParticles MonoBehaviour
{

    public 
Vector3 scale Vector3.one;

    
    public 
void Update ()
    {
        
// позиция (глобальная)
        
var pos transform.localToWorldMatrix.MultiplyPoint(
                              
Vector3.Scale(Random.insideUnitSpherescale));

        
// генерация одной частицы с заданными параметрами
        
particleEmitter.Emit(
            
pos
            
Vector3.zero// скорость
            
0.1f// размер
            
3// энергия(время жизни)
            
Color.white //цвет
            
);
    }



Amatsu 17.11.2011 12:48

Ответ: Фак по Юнити.
 
Хм... а какой командой добавить созданный префаб в сцену?

pax 17.11.2011 12:50

Ответ: Фак по Юнити.
 
Instantiate(Resources.Load("myPrefab", typeof(GameObject)))

где myPrefab должен лежать в папке Resources

RegIon 17.11.2011 13:11

Ответ: Фак по Юнити.
 
Цитата:

Сообщение от pax (Сообщение 210004)
Пакадж в аттаче

Спасиб,тока он после отжатия клавы всё двигается,можно это исправить??и как сделать моментальное движение?

pax 17.11.2011 13:14

Ответ: Фак по Юнити.
 
Моментальное движение физического объекта? У тебя система взрываться будет при столкновении с таким объектом. Если нет необходимости чтобы объект проваливался (игра в плоскости), то можно просто сделать RigidBody.IsKinematic = true и двигать этот объект с помощью transform'а.
Либо у физического объекта изменить скорость до нуля при остановке (отжатии кнопки).

RegIon 17.11.2011 13:33

Ответ: Фак по Юнити.
 
Цитата:

Моментальное движение физического объекта? У тебя система взрываться будет при столкновении с таким объектом. Если нет необходимости чтобы объект проваливался (игра в плоскости), то можно просто сделать RigidBody.IsKinematic = true и двигать этот объект с помощью transform'а.
Либо у физического объекта изменить скорость до нуля при остановке (отжатии кнопки).
Там автоматом она зануляется(вектора становятся нулями)
Просто смотреть пока тело разгонится как-то не очень

Nex 17.11.2011 13:42

Ответ: Фак по Юнити.
 
Силу "разгона" увеличь..

RegIon 17.11.2011 14:54

Ответ: Фак по Юнити.
 
А чтобы останавливался, Drag поставь на максимум

Amatsu 21.11.2011 21:02

Ответ: Фак по Юнити.
 
Возникла необходимость научиться писать модули для самого редактора Unity. Киньте кто-нибудь, пожалуйста, в меня ссылкой на какой-нить годный туториал или сэмплы по этому вопросу

pax 21.11.2011 21:03

Ответ: Фак по Юнити.
 
У нас на форуме есть пара туторов, я писал. Их посмотри.

Amatsu 22.11.2011 15:54

Ответ: Фак по Юнити.
 
Подстажите, пожалуйста, есть ли в GUILayot компонент списка? Чтобы пользователь мог выбрать один из элементов и получить результат этого выбора

Lestar 22.11.2011 15:57

Ответ: Фак по Юнити.
 
http://www.unifycommunity.com/wiki/i...itle=PopupList

pax 22.11.2011 16:07

Ответ: Фак по Юнити.
 
Конкретнее http://unity3d.com/support/documenta...ctionGrid.html

Amatsu 22.11.2011 16:27

Ответ: Фак по Юнити.
 
Хм. Наткнулся на Unity Forms http://code.google.com/p/unityforms/...rms/ListBox.cs
Но не понял, как заставить ее работать (файл поместил в папку Editor).

А про Грид, не знаю, уместно ли это в моем случае. Поясню - мне нужно прочитать папку с огромным числом файлов и на основе просмотра сделать список всех найденных элементов в своем собственном модуле для юнити. Как-то грид с кнопками на овер 200 позиций...

pax 22.11.2011 20:15

Ответ: Фак по Юнити.
 
200 это не много, у нас в меню блоков визуального редактора несколько тысяч итемов. Это не обязательно кнопки, можно рисовать кнопку, но стиль для нее выбрать Label. Тогда будет просто кликабельный текст.

Amatsu 23.11.2011 18:41

Ответ: Фак по Юнити.
 
Использую EditorUtility.OpenFilePanel, вопрос - как в третьем параметре расширения типа string указать несколько расширений? Заранее спасибо

pax 23.11.2011 20:02

Ответ: Фак по Юнити.
 
А через запятую нельзя? Вообще там название переменной в единственном числе... Может быть еще разделитель |

Amatsu 23.11.2011 20:11

Ответ: Фак по Юнити.
 
Пробовал, не помогло

Amatsu 24.11.2011 12:52

Ответ: Фак по Юнити.
 
Создал папку Assets\Plugins, закинул туда файл System.Windows.Forms.dll, но не могу разобраться, как правильно импортировать ее в проект, а точнее - получить ее функцию OpenFileDialog

UPDATE
Мне нужно вызвать системный диалог выбора файла в редакторе, а не игре. В какой-то заднице нашел, что достаточно кинуть библиотеку в папку Editor. Кинул - ВС начала видеть функции из этой библиотеки. Вот только при попытке вызвать OpenFileDialog - ничего не просходит.

UPDATE 2
Разобрался, нужно было писать:
Код:

            OpenFileDialog open = new OpenFileDialog();
            open.ShowDialog();


Amatsu 24.11.2011 13:23

Ответ: Фак по Юнити.
 
Теперь другая проблема: через раз вылезает ошибка при вызове диалога "oops! Could not register window class : win32 error 0"

pax 24.11.2011 13:24

Ответ: Фак по Юнити.
 
System.Windows.Forms.dll официально не поддерживается. Сделай диалог с помощью GUI.

Amatsu 24.11.2011 13:48

Ответ: Фак по Юнити.
 
А всего то авторам надо было добавить возможность указывать несколько фильтров для OpenFilePanel...
Да, Юнити все еще сыроват


Часовой пояс GMT +4, время: 00:45.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot