forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D/GUI (http://forum.boolean.name/forumdisplay.php?f=167)
-   -   Unity и 2D (http://forum.boolean.name/showthread.php?t=16122)

toyman 28.12.2011 19:03

Unity и 2D
 
Как нарисовать 2D спрайт в юнити?

GUI.DrawTexture?

Если да то можно примерчик небольшой

pax 28.12.2011 23:38

Ответ: Unity и 2D
 
Для каких целей нужен этот 2d спрайт?

toyman 29.12.2011 10:15

Ответ: Unity и 2D
 
Вобще для фона меню
но есть разные методы создания спрайта?

cahekp 29.12.2011 10:34

Ответ: Unity и 2D
 
Если делаешь меню - то лучше, конечно, запилить всё это дело в 3D в самом редакторе уровней.
Ставишь ортогональную камеру, а перед ней - plane'ы, разворачиваешь их лицом к камере и вуаля, вот тебе и спрайты.

Если делаешь ГУИ во время проигрывания какого-нибудь уровня, то удобней будет использовать GUI.DrawTexture().

pax 29.12.2011 10:52

Ответ: Unity и 2D
 
Для фона можно создать плейн с текстурой.

Можно так же нарисовать с помощью GUI.Label или GUI.DrawTexture

Примеры есть по ссылкам. Если надо поворачивать GUI, то можно использовать GUI.matrix, для этого есть метод GUIUtility.RotateAroundPivot
Желательно после вращения восстанавливать исходную матрицу GUI(т.е. сначала нужно ее сохранить в переменную, а потом назначить заново).

cahekp 29.12.2011 10:53

Ответ: Unity и 2D
 
А вообще, честно говоря я не думаю что это вопрос, который стоит задавать на форуме.

Спрашиваешь: "Как нарисовать 2D спрайт в юнити?"
И тут же сам и отвечаешь: "GUI.DrawTexture".

Блин, каких-то строго определенных правил в построении ГУИ (как, собственно, и во многом другом в игроделании) нет. Каждый делает так, как ему удобней и на что хватит фантазии. Если работает - уже хорошо.

Программирование - это ж, ёпта, творческая профессия! :) Спрайты можешь сделать хоть через GUI.DrawTexture, а можешь через GUI.Label, или через GL.Begin/GL.Vertex/GL.End, либо просто сделать их 3D-плоскостями в редакторе. А можешь вообще извратиться и намутить пиксельный шейдер (в качестве полноэкранного эффекта), который будет напрямую в задний буфер рисовать тебе картинку, какую тебе надо. И это тоже, в принципе, вариант.

Так что меньше спрашивай, больше экспериментируй! Вот у меня в начале 2000-го вообще интернета не было (даже модемного!), спросить не у кого, были только бумажные книжки. Приходилось сидеть и по примерам, да методом тыка всё изучать.. И вот тогда и приходило полное понимание того, что и как работает.

Эх, вот были времена!!... :)

P.S. Вот ты просишь примерчик по GUI.DrawTexture. Ты справку читал? Чем она тебя не устраивает? Там примеры аж на 3 (трех!!) языках! Даже плохо зная английский можно понять, как это работает. Не?

toyman 29.12.2011 20:46

Ответ: Unity и 2D
 
Спасибо

gnoblin 01.01.2012 02:29

Ответ: Unity и 2D
 
через DrawTexture или Label делать спрайты очень плохая идея - бить за такое творчество))

Morganolla 03.12.2012 23:25

Ответ: Unity и 2D
 
Цитата:

Сообщение от gnoblin (Сообщение 215889)
через DrawTexture или Label делать спрайты очень плохая идея - бить за такое творчество))

А как? Тоже интересует приспособить Юнити под 2Д. Использовать plane под спрайт не очень эффективно, потому что там аж 200 треугольников. Надо сделать квадратный меш из 2 треугольников и натягивать на него текстуру. Подскажите как его можно сделать. В частности программно.

pax 03.12.2012 23:27

Ответ: Unity и 2D
 
Программное создание меша
http://docs.unity3d.com/Documentatio...ence/Mesh.html

Morganolla 05.12.2012 17:39

Ответ: Unity и 2D
 
Нашел бесплатный ассест для 2Д - http://www.wyrmtale.com/orthello
на базе C#. Спрайты в виде мешей из 2 треугольников ну вроде туты неплохие и все так складно в общем. Стоит на него упасть или лучше лепить свое? Рах жду твоего мнения.

pax 05.12.2012 17:49

Ответ: Unity и 2D
 
Не использовал, надо будет поглядеть. Я сейчас использую свои наработки.

Morganolla 05.12.2012 19:37

Ответ: Unity и 2D
 
Цитата:

Сообщение от pax (Сообщение 245899)
Я сейчас использую свои наработки.

Можешь рассказать или поделиться?

pax 05.12.2012 23:46

Ответ: Unity и 2D
 
Поделиться в данный момент нет. Но больших плюшек там нет, функционала меньше чем в любом законченном фреймворке.

Morganolla 10.12.2012 14:11

Ответ: Unity и 2D
 
Для меню с кнопками делать отдельную сцену?

pax 10.12.2012 14:14

Ответ: Unity и 2D
 
Можно отдельную камеру, рендерющую отдельный слой. А так по желанию)

Morganolla 10.12.2012 20:30

Ответ: Unity и 2D
 
Можно подробнее?
Добавить на сцену вторую камеру?
Как сделать чтобы она рендерила только свой слой?
Как переключаться между камерами?
Заранее сорри - я пока полный нуб.

pax 10.12.2012 20:39

Ответ: Unity и 2D
 
1. Добавить камеру.
2. Установить ей режим Orthographic
3. Размер задается как половина высоты нужного разрешения экрана.
4. Создать слой для камеры (в правом верхнем углу Unity есть редактор слоев и тегов).
5. Выделить объекты меню и перенести их на этот слой.
6. Камере Выставить Crear - Depth
7. Установить Culling Mask с нужным слоем, все остальные выключить.
8. Настроить камере Depth - чтобы визуализировала после основной.
9. Основной камере в Culling Mask отключить слой меню.

Morganolla 10.12.2012 22:18

Ответ: Unity и 2D
 
Спасибо, изучу... А какой вариант оптимальнее и почему?

RegIon 10.12.2012 22:21

Ответ: Unity и 2D
 
.Ну подумай: если у тебя будет 2 сцены с одной камерой, или одна сцена с 2мя,то что лучше?
Конечно если ты не хочешь меню в текущем скине, а типо как главное меню.

pax 11.12.2012 07:38

Ответ: Unity и 2D
 
Цитата:

Сообщение от Morganolla (Сообщение 246237)
А какой вариант оптимальнее и почему?

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

Morganolla 11.12.2012 11:41

Ответ: Unity и 2D
 
А почему вы так боитесь загрузки-выгрузки? Это медленно?(будет задержка?) Но ведь это потребует меньше оперативной памяти? Не так ли?

Morganolla 11.12.2012 11:43

Ответ: Unity и 2D
 
Цитата:

Сообщение от Костян (Сообщение 246238)
.Ну подумай: если у тебя будет 2 сцены с одной камерой, или одна сцена с 2мя,то что лучше?

Я долго напрягал свои мозги, но так и не понял что лучше...:)

St_AnGer 11.12.2012 12:02

Ответ: Unity и 2D
 
Цитата:

Сообщение от Morganolla (Сообщение 246277)
А почему вы так боитесь загрузки-выгрузки? Это медленно?(будет задержка?) Но ведь это потребует меньше оперативной памяти? Не так ли?

Боятся не загрузки-выгрузки, а наличия двух сцен (меню и игра), то есть, фактически, у тебя будет два меню - одно главное, а другое игровое, которое тоже должно быть обязательно. Не будешь же ты выгружать (предварительно сохраняя позиции!) сцену каждый раз как пользователь решил нажать на паузу что бы отойти попить чаю, и загружать сцену, когда он вернулся и решил продолжить играть? Вот такая вот экономия.

RegIon 11.12.2012 12:39

Ответ: Unity и 2D
 
Цитата:

Сообщение от pax (Сообщение 246263)
Unity не может одновременно иметь две открытых сцены. Поэтому если меню в отдельной сцене, то его загрузка выгрузит ресурсы уровня. Ну и собственно наоборот - загрузка уровня выгрузит меню. Вариант с двумя камерами позволит держать все в одной сцене, но в разных слоях.

Может, косвенно, для этого используется Application.LoadLevelAdditive
Правда есть немного ограничений.

pax 11.12.2012 12:59

Ответ: Unity и 2D
 
Цитата:

Сообщение от Morganolla (Сообщение 246277)
А почему вы так боитесь загрузки-выгрузки? Это медленно?(будет задержка?) Но ведь это потребует меньше оперативной памяти? Не так ли?

Я разве сказал что боюсь? Я привел два варианта. Какой использовать зависит от требуемой задачи.

Цитата:

Сообщение от Костян (Сообщение 246280)
Может, косвенно, для этого используется Application.LoadLevelAdditive

Одновременно две сцены != загрузить объекты двух сцен в одну.

Morganolla 11.12.2012 17:05

Ответ: Unity и 2D
 
Цитата:

Сообщение от pax (Сообщение 246282)
Я разве сказал что боюсь? Я привел два варианта. Какой использовать зависит от требуемой задачи.

Почему новичку так трудно понять опытных профи? :-D
И все же: КАК это зависит от требуемой задачи??? Я так и не понял...:crazy:

pax 11.12.2012 17:43

Ответ: Unity и 2D
 
Задачи:
1. Главное меню. Вполне приемлема отдельная сцена.
2. Игровое меню. На паузе сцена игры не выгружается.

Что не ясно?

Morganolla 12.12.2012 12:17

Ответ: Unity и 2D
 
Новый вопрос: как оптимальнее временно убрать спрайт со сцены ( чтобы он не отрисовывался )? Задвинуть его за фон по оси Z или в сторону по оси X?

pax 12.12.2012 12:30

Ответ: Unity и 2D
 
Если спрайт это меш, то достаточно его рендерер отключить.
renderer.enabled = false;

RegIon 12.12.2012 14:09

Ответ: Unity и 2D
 
А если ещё и нужно исключить его из расчётов: gameObject.active = false

pax 12.12.2012 14:36

Ответ: Unity и 2D
 
Цитата:

Сообщение от Костян (Сообщение 246386)
А если ещё и нужно исключить его из расчётов: gameObject.active = false

Этот вариант отключит объект и все скрипты на нем. Плюс ко всему, если на него не осталось ссылки, то его не найти командами Find.

Morganolla 13.12.2012 15:04

Ответ: Unity и 2D
 
Новый вопрос:
- как в скрипте при нажатии кнопки перейти на новую сцену ( какая ф-ия вызова новой сцены)
- как выйти из игры (какая ф-ия выхода из приложения ).

Дайте совет новичку для 2Д игры, что лучше:
- изучить фреймворк Orthello 2D (там вроде нет открытых исходников) и их классы;
- или самому сделать меш спрайта и пользоваться общими мануалами Юнити?

RegIon 13.12.2012 20:10

Ответ: Unity и 2D
 
класс приложения тебе а помощь: http://docs.unity3d.com/Documentatio...plication.html
Твой выбор

Morganolla 17.12.2012 21:25

Ответ: Unity и 2D
 
Хочу сделать, чтобы спрайт реагировал на наведение мыши на него ( кнопка меню подсвечивалась), нашел фцию: void OnMouseOver()
но она не работает! В чем дело? Пример - просто сдвинуть спрайт:
Код:

using UnityEngine;
using System.Collections;

public class NewBehaviourScript : MonoBehaviour {

        void OnMouseOver()
        {
        transform.Translate(1,0,0);
    }
}


pax 18.12.2012 05:40

Ответ: Unity и 2D
 
Сообщение OnMouseOver приходит только если на объекте есть коллайдер. Либо если это GUITexture или GUIText. Плюс на мобильниках не работает.

Harter 18.12.2012 22:22

Ответ: Unity и 2D
 
Цитата:

Сообщение от pax (Сообщение 246840)
Плюс на мобильниках не работает.

В Unity 4 работает и на мобильниках. Инфа 100%.

pax 18.12.2012 23:13

Ответ: Unity и 2D
 
Пока небыло необходимости в переходе на четверку, но спасибо за инфу.

Morganolla 20.12.2012 19:43

Ответ: Unity и 2D
 
Новый вопрос - при анимации требуется не сдвигать текстуру на спрайте, а менять сами файлы текстуры ( в каждом файле свой кадр ). Подскажите как это сделать? Надо наверно сделать заготовку массива текстур, и потом накладывать их на мешь меняя индекс в массиве. Подскажите тип данных и ф-ию наложения. Лучше в виде фрагментов кода. Спасибо.

Спасибо, уже додумался.... вроде получилось... ура!...

Код:

public class Animator : MonoBehaviour
{
        float time=0;
        float frame_time=1000;
        public int frame=0;
        public Texture [] tx;
       
       
       
        // Use this for initialization
        void Start ()
        {
       
        }
       
        // Update is called once per frame
        void Update ()
        {
      if (Input.GetKey("z"))
                {
            transform.Translate(Vector3.left * Time.deltaTime* 100);
                        time+=Time.deltaTime;
                        frame=((int)(time*frame_time))%8;
                        renderer.material.SetTexture("_MainTex", tx[frame]);
                }
                else
                {
              if (Input.GetKey("c"))
                        {
                    transform.Translate(Vector3.right * Time.deltaTime* 100);
                                time+=Time.deltaTime;
                                frame=((int)(time*frame_time))%8;
                                renderer.material.SetTexture("_MainTex", tx[frame]);


                        }
                        else
                        {
                                time=0;
                                frame=0;
                                renderer.material.SetTexture("_MainTex", tx[frame]);

                        }
                       
                }
        }
}


RegIon 20.12.2012 20:21

Ответ: Unity и 2D
 
Ты извращенец таким макаром анимировать. А если 1000 тексов будет? Для таких дел есть такая штука, как тайлинг.

RegIon 20.12.2012 20:29

Ответ: Unity и 2D
 
http://docs.unity3d.com/Documentatio...ureOffset.html

Morganolla 20.12.2012 20:30

Ответ: Unity и 2D
 
В смысле делать большую текстуру со всеми кадрами, и сдвигать координаты?

Morganolla 20.12.2012 20:31

Ответ: Unity и 2D
 
Но при этом памяти отожрет столько же... и какая выгода?
Ну и потом художник уже нарисовал в отдельных файлах, а мне самому сводить лень.

RegIon 20.12.2012 20:32

Ответ: Unity и 2D
 
Цитата:

Сообщение от Morganolla (Сообщение 247144)
В смысле делать большую текстуру со всеми кадрами, и сдвигать координаты?

Ну да, если под мобилку, то обязательно.. а то хранить 1000 текстур не вариант, а одна - там свои закорючки. Да и менять текстуры не быстро, проще щейдеру наверно высекать куски

RegIon 20.12.2012 20:41

Ответ: Unity и 2D
 
А ты проверь да узнаешь( левую текстуру большую возьми и много мелких общей площадью с нее).


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

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