|
Unity Мультиплатформенный инструмент для разработки игр |
05.11.2010, 11:15
|
#301
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Фак по Юнити.
Другого "нормального" способа определить нахождение мышки над GUI не знаю. GUIElement, GUITexture, GUIText, GUILayer - это отдельная часть от GUI. Я с Unity знаком не так долго, но вроде они остались для поддержки старых версий (но утверждать не могу).
С версией Unity 3.1 вроде обещают новый GUI. Возможно там будут универсальные функции для этой задачи. Ждем ее выхода еще по тому, что обещают внедрить новые инструменты по работе с текстурами. И вроде она должна выйти вот вот...
|
(Offline)
|
|
05.11.2010, 20:25
|
#302
|
scientist.alien
Регистрация: 12.02.2007
Сообщений: 2,098
Написано 1,030 полезных сообщений (для 2,593 пользователей)
|
Ответ: Фак по Юнити.
А меж тем все прозаично:
GUIText, GUITexture, GUIElement очень удобны для отрисовки HUD-а, а UnityGUI - для менюшек.
__________________
Public service announcement: вы можете заблокировать отображение сообщений определённого пользователя, добавив его ник в список игнорируемых.
Tau lab. We LOVE you. We MADE you.
|
(Offline)
|
|
05.11.2010, 20:47
|
#303
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Фак по Юнити.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
06.11.2010, 10:30
|
#304
|
AnyKey`щик
Регистрация: 23.10.2010
Адрес: UKRAINE,Crimea,Simferopol
Сообщений: 4
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Фак по Юнити.
Сообщение от pax
Другого "нормального" способа определить нахождение мышки над 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 для универсальности.
В общем, огромное спасибо.
|
(Offline)
|
|
06.11.2010, 10:47
|
#305
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Фак по Юнити.
Пожалуйста
|
(Offline)
|
|
24.11.2010, 23:44
|
#306
|
AnyKey`щик
Регистрация: 24.11.2010
Сообщений: 7
Написано одно полезное сообщение
|
Ответ: Фак по Юнити.
Вопросы:
1. Как работать с бинарными файлами (read, write)? Никак не могу найти подходящий класс.
2. Как рендерить в текстуру?
3. Надо ли удалять объект после оператора new? Если да, то где: awake(), start(), update(), ...?
Использую бесплатную версию, JavaScript.
|
(Offline)
|
|
25.11.2010, 00:58
|
#307
|
scientist.alien
Регистрация: 12.02.2007
Сообщений: 2,098
Написано 1,030 полезных сообщений (для 2,593 пользователей)
|
Ответ: Фак по Юнити.
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 будет тебе скрипт вешать? Скрипт нужно подготовить для объекта заранее, если хочешь его на создаваемый объект повесить.
__________________
Public service announcement: вы можете заблокировать отображение сообщений определённого пользователя, добавив его ник в список игнорируемых.
Tau lab. We LOVE you. We MADE you.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
25.11.2010, 02:21
|
#308
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Фак по Юнити.
- C бинарными файлами работать можно через классы System.IO. Справка по ним тут: http://msdn.microsoft.com/ru-ru/library/system.io.aspx
Пример подключения классов из этого пространства имен здесь: http://www.unifycommunity.com/wiki/i..._Load_from_XML правда для сохранения текста, но это одно и тоже. Эти классы не работают в WebPlayer. В нем работа с файлами запрещена. - Самый простой способ - создать в ассетах RenderTexture. Создать камеру, камере указать в качестве цели текстуру. Программный способ приведен Taugeshtu, за что ему спасибо. Скажу что камеру включать для функции Render не надо. Цель визуализации так же можно указать как RenderTexture.active.
- Если это объекты Unity (унаследованные от UnityEngine.Object), то удалять их надо когда они не нужны функцией Destroy(). Если это другие классы, то сборщик мусора сам позаботится об их удалении. Структуры и ValueType'ы (int, float, Vector3, Rect, Quaternion) удаляются при выходе из области видимости (хотя для js по моему для них конструктор не нужен). Все Object'ы удаляются при загрузке новой сцены, если им принудительно не сказали не уничтожаться.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
26.11.2010, 21:09
|
#309
|
Элита
Регистрация: 26.07.2008
Сообщений: 1,972
Написано 1,095 полезных сообщений (для 3,923 пользователей)
|
Ответ: Фак по Юнити.
Возникла проблема - с недавнего времени не могу зарегистрировать юнити. То есть регистрация идет, но после перезагрузки компьютера юнити просит повторить эту операцию. Проверялся CureIt, вирусов не обнаружил.
В чем может быть проблема?
|
(Offline)
|
|
26.11.2010, 21:29
|
#310
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Фак по Юнити.
id диска не меняется после перезагрузки?
|
(Offline)
|
|
26.11.2010, 21:54
|
#311
|
Элита
Регистрация: 26.07.2008
Сообщений: 1,972
Написано 1,095 полезных сообщений (для 3,923 пользователей)
|
Ответ: Фак по Юнити.
Записал id диска
Зарегистрировал юнити. Работает
Перезагрузился - id диска тот же, юнити не работает
|
(Offline)
|
|
26.11.2010, 21:58
|
#312
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Фак по Юнити.
Тогда не знаю. Попробуй запускать Unity от имени администратора...
|
(Offline)
|
|
27.11.2010, 20:07
|
#313
|
Элита
Регистрация: 26.07.2008
Сообщений: 1,972
Написано 1,095 полезных сообщений (для 3,923 пользователей)
|
Ответ: Фак по Юнити.
Попробуй запускать Unity от имени администратора...
|
Пробовал
Черт, и копирование .ilf файла для повторной регистрации не помогает...
|
(Offline)
|
|
04.12.2010, 12:26
|
#314
|
AnyKey`щик
Регистрация: 24.11.2010
Сообщений: 7
Написано одно полезное сообщение
|
Ответ: Фак по Юнити.
Еще один вопрос, но больше он относится к программированию по C#:
какие передать параметры, в конструктор GameObject(string name, params Type[] components), для создания камеры?
|
(Offline)
|
|
04.12.2010, 12:37
|
#315
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Фак по Юнити.
Так наверное:
Camera cam = new GameObject("MyCam", typeof(Camera)).camera;
или так:
Camera cam = new GameObject("MyCam").AddComponent<Camera>();
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 00:49.
|