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)

pax 05.11.2010 11:15

Ответ: Фак по Юнити.
 
Другого "нормального" способа определить нахождение мышки над GUI не знаю. GUIElement, GUITexture, GUIText, GUILayer - это отдельная часть от GUI. Я с Unity знаком не так долго, но вроде они остались для поддержки старых версий (но утверждать не могу).

С версией Unity 3.1 вроде обещают новый GUI. Возможно там будут универсальные функции для этой задачи. Ждем ее выхода еще по тому, что обещают внедрить новые инструменты по работе с текстурами. И вроде она должна выйти вот вот...

Taugeshtu 05.11.2010 20:25

Ответ: Фак по Юнити.
 
А меж тем все прозаично:
GUIText, GUITexture, GUIElement очень удобны для отрисовки HUD-а, а UnityGUI - для менюшек.

pax 05.11.2010 20:47

Ответ: Фак по Юнити.
 
а GL еще удобнее :)
http://shgames.ru/unity/font/

Stanis1av 06.11.2010 10:30

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

Сообщение от pax (Сообщение 167164)
Другого "нормального" способа определить нахождение мышки над GUI не знаю.

В общем воспользовался твоей идеей, все отлично работает.

переделал update() , а точнее убрал,сделал так
Код:


public static bool mouseOnGUI (Vector2 mp) {
       
mp.y = Screen.height - mp.y;
                       
foreach (var rect in GUIRects) {
                 
if(rect.Value.Contains(mp)) {
                         
return true;
  }
 }               
return false;
}

теперь обращаюсь к этому методу так GUIGame.mouseOnGUI(Input.mousePosition)

да... щас подумал правильней было-бы возвращать было имя GUI для универсальности.

В общем, огромное спасибо.

pax 06.11.2010 10:47

Ответ: Фак по Юнити.
 
Пожалуйста :)

Pan89 24.11.2010 23:44

Ответ: Фак по Юнити.
 
Вопросы:
1. Как работать с бинарными файлами (read, write)? Никак не могу найти подходящий класс.
2. Как рендерить в текстуру?
3. Надо ли удалять объект после оператора new? Если да, то где: awake(), start(), update(), ...?

Использую бесплатную версию, JavaScript.

Taugeshtu 25.11.2010 00:58

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

1. Как работать с бинарными файлами (read, write)? Никак не могу найти подходящий класс.
В самом Юнити обертки для этих операций нет, ищи подобное для самого JavaScript

Цитата:

2. Как рендерить в текстуру?
Буквально позавчера (или нет?) разбирался, вот к чему пришел:
Код:

var ProjectedText : String = "";

private var cam : GameObject;
private var tObj: GameObject;
private var proj : Projector;
private var shadow_tex:RenderTexture;
static var original_tex:Texture;

function Start () {
        cam = GameObject.FindWithTag("AdditionalCam");
        tObj = GameObject.FindWithTag("ProjectorHelper");
        proj = gameObject.GetComponent(Projector);
        shadow_tex = RenderTexture(Screen.width, Screen.height, 0);
        original_tex = proj.material.GetTexture("_ShadowTex");
       
        shadow_tex.width = 1024;
        shadow_tex.height = 1024;
        shadow_tex.useMipMap = true;
        shadow_tex.Create();
       
        // set special object GUIText to text string
        tObj.guiText.text = ProjectedText;
        tObj.guiText.material.color = Color(0.1, 0.1, 0.1, 1);
       
        // render to texture screen
        cam.camera.enabled = true;
        cam.camera.targetTexture = shadow_tex;
        cam.camera.Render();
       
        // asign texture to material
        proj.material.SetTexture("_ShadowTex",shadow_tex);
       
        // reset to defaults
        cam.camera.enabled = false;
        tObj.guiText.text = "";
}

function OnApplicationQuit() {
        proj.material.SetTexture("_ShadowTex",original_tex);
}

Что делает:
Рендерит в текстуру проектора текст, содержащийся в строке, в соответствии с настройками объекта с GUIText и тегом "ProjectorHelper"

Как работает:
  • находит дополнительную (можно и с основной - поправка 1) камеру, объект с текстом GUIText, устанавливает ссылку на компонент проектора (так было надо), сохраняет оригинальную текстуру проектора в переменную (чтобы потом в редакторе проектор не "испортился")
  • создает рендер-текстуру, задает ее настройки. Обрати внимание, что рендер-текстура не создается моментально - только после проверки IsActive или вызова Create()
  • устанавливается текст для объекта, который будет рендерится (рендерится только он из-за настроек culling layers камеры)
  • включается дополнительная камера (по умолчанию выключена была, чтоб не отвлекала)
  • устанавливается текстура, в которую пойдет рендер
  • делается рендер))
  • применяется отрендереная текстура в материал проектора
  • сбрасываются настройки

Поправка 1.
Если делать это через главную и единственную камеру в сцене, то я думаю нужно не включать-выключать компонент камеры у её объекта и вместо этого устанавливать в конце её targetTexture = 0. Ну и если нужно это делать в рантайме, то все из Start переносится в Update по условию (или без него, если вы мазохист)

Цитата:

3. Надо ли удалять объект после оператора new? Если да, то где: awake(), start(), update(), ...?
Тут точно не скажу... Порой бывает нужно оставлять объекты до конца работы програмы (или сцены), иногда - удалять после пары действий.
Awake и прочие - это уже куски скрипта. А кто на новый GO будет тебе скрипт вешать? Скрипт нужно подготовить для объекта заранее, если хочешь его на создаваемый объект повесить.

pax 25.11.2010 02:21

Ответ: Фак по Юнити.
 
  1. C бинарными файлами работать можно через классы System.IO. Справка по ним тут: http://msdn.microsoft.com/ru-ru/library/system.io.aspx
    Пример подключения классов из этого пространства имен здесь: http://www.unifycommunity.com/wiki/i..._Load_from_XML правда для сохранения текста, но это одно и тоже. Эти классы не работают в WebPlayer. В нем работа с файлами запрещена.
  2. Самый простой способ - создать в ассетах RenderTexture. Создать камеру, камере указать в качестве цели текстуру. Программный способ приведен Taugeshtu, за что ему спасибо. Скажу что камеру включать для функции Render не надо. Цель визуализации так же можно указать как RenderTexture.active.
  3. Если это объекты Unity (унаследованные от UnityEngine.Object), то удалять их надо когда они не нужны функцией Destroy(). Если это другие классы, то сборщик мусора сам позаботится об их удалении. Структуры и ValueType'ы (int, float, Vector3, Rect, Quaternion) удаляются при выходе из области видимости (хотя для js по моему для них конструктор не нужен). Все Object'ы удаляются при загрузке новой сцены, если им принудительно не сказали не уничтожаться.

Nuprahtor 26.11.2010 21:09

Ответ: Фак по Юнити.
 
Возникла проблема - с недавнего времени не могу зарегистрировать юнити. То есть регистрация идет, но после перезагрузки компьютера юнити просит повторить эту операцию. Проверялся CureIt, вирусов не обнаружил.
В чем может быть проблема?

pax 26.11.2010 21:29

Ответ: Фак по Юнити.
 
id диска не меняется после перезагрузки?

Nuprahtor 26.11.2010 21:54

Ответ: Фак по Юнити.
 
Записал id диска
Зарегистрировал юнити. Работает
Перезагрузился - id диска тот же, юнити не работает

pax 26.11.2010 21:58

Ответ: Фак по Юнити.
 
Тогда не знаю. Попробуй запускать Unity от имени администратора...

Nuprahtor 27.11.2010 20:07

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

Попробуй запускать Unity от имени администратора...
Пробовал
Черт, и копирование .ilf файла для повторной регистрации не помогает...:(

Pan89 04.12.2010 12:26

Ответ: Фак по Юнити.
 
Еще один вопрос, но больше он относится к программированию по C#:
какие передать параметры, в конструктор GameObject(string name, params Type[] components), для создания камеры?

pax 04.12.2010 12:37

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

Camera cam = new GameObject("MyCam"typeof(Camera)).camera

или так:
PHP код:

Camera cam = new GameObject("MyCam").AddComponent<Camera>(); 



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

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