forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Общие вопросы (http://forum.boolean.name/forumdisplay.php?f=166)
-   -   Вопросы от новичка (http://forum.boolean.name/showthread.php?t=15809)

Aikon 08.11.2011 13:50

Вопросы от новичка
 
Задумал значит сделать игру FPS, отказавшись от Blitz3D. Вчера установил Unity 3 / C#, потыкал немного и почитал FAQ. В связи с чем несколько вопросов.

1. Я правильно понимаю, что Prefab и Game Object соотносятся примерно так же как переменная и тип или класс и объект?
2. Импортнул 3ds модель коридора. Есть какая то возможность, чтобы Unity не давал ходить через стены и предметы на полу?
3. Планируется много элементов, которые должны по клику выдать надпись на экран. Каждый объект - это фактически кубик. Для этого надо сделать отдельный prefab или просто написать Component и прикрутить его ко всем объектам?
4. Пример полноэкранного фильтра кто-нить может привести?
5. В игре будут cut-сцены с другим окружением, напр. игрок вспоминает что было. Как это лучше сделать? Насколько я понял в Unity есть Scene и Layout. Первые надо использовать, если наборы объектов различны; вторые, если есть общая часть (например местность та же). Верно?

Lestar 08.11.2011 15:56

Ответ: Вопросы от новичка
 
1.GameObject это обьект. Prefab это ссыдка на обьект.
2.Добавить обьекту коллайдер. Component->Physics->Mesh Collider
3.Создать префаб и его клонировать/дублировать в сцене
5.Использовать отдельные сцены.Layout имеет отношение к GUI,Если сцена та же можно думик засунуть всю логику сцуны и в нужный момент его инстансить.По окончанию кат сцены дестроить думик.

pax 08.11.2011 19:53

Ответ: Вопросы от новичка
 
1. Префаб - это GameObject, находящийся в ресурсах и преднозначенный для копирования. Может иметь сложную структуру.
4. Импортируй стандартные ассеты с Image эффектами.
5. Тут можно работать со слоями. Например основная камера не визуализаирует слой катсцены, а камера катсцены не визуализирует слои основной камеры.

Aikon 08.11.2011 22:11

Ответ: Вопросы от новичка
 
Lestar, pax, спасибо.
1. Ссылка на объект? На указатель вроде не похоже. Может рассматривать, как шаблон?
2. Добавил. Только такое впечатление, что теперь объект считается параллепипедом, т.е. если я снаружи, то он не впустит внутрь; если снутри, то не выпустит. Внутри можно пересекать объекты, напр. стол.
Т.е. вопрос в том, можно ли сделать так, чтобы тело было не физическим кубом, а сложной геометрией, через которую нельзя ходить (в Blitz всего пара команд нужна была).
3. Не совсем точно выразился: каждый объект может иметь свой меш, напр. стул или стол. Но должны иметь общее поведение - при клике выдавать надпись и останавливать общий поток.
4. Пока не понятно. Надо побольше с движкой посидеть.
5. Аналогично. Буду маны смотреть и много думать :)

pax 08.11.2011 22:32

Ответ: Вопросы от новичка
 
1. Да шаблон.
2. MeshCollider.
3. Все правильно. Создаешь префаб, настраиваешь (вешаешь скрипты с нужным поведением). Потом кидаешь этот объект в сцену несколько раз.
4. http://unity3d.com/support/documenta...geEffects.html импортируй пакадж из Assets->Import Package->Image Effects (работаеют только в про версии).

Aikon 09.11.2011 18:25

Ответ: Вопросы от новичка
 
pax,
2. Я сразу же как Lestar это добавил. Только все равно проходит. Вполне возможно потому что Mesh был импортирован из 3ds-файла, который был не единым, а разбит пообъектно. Надо потыкать еще.
3. Понятно.
4. А на последний Unity Pro уже кряк есть?

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

Lestar 09.11.2011 18:39

Ответ: Вопросы от новичка
 
Тестовые проекты http://unity3d.com/support/resources/example-projects/
Чтобы не проходило коллайдер должен быть как на стенах,так и на персонаже.На стенах лучше использовать коллайдеры примитивов.С mesh коллайдером не всегда все гладко.Если меш составной варианта два-или на всю иерархию повесить один box коллайдер например или на каждого чалда отдельный коллайдер.

Aikon 09.11.2011 22:58

Ответ: Вопросы от новичка
 
Lestar, с официального сайта демки я уже посмотрел. Слишком наворочено.

Скачал Ball Collector
Просто и понятно. Хочется такого же :)

Только вот никак не пойму, как сделать шаблонную модельку и из нее уже сделать два GameObject с разными мешами.
Может кто пример покажет?

pax 10.11.2011 00:44

Ответ: Вопросы от новичка
 
Открой ассет стор через меню Window, там найдешь что нужно.

Aikon 10.11.2011 01:13

Ответ: Вопросы от новичка
 
pax, у меня free-версия. В меню Windows в группе ярлыков Unity "Asset store" нет :(
Видимо для изучения лучше pro крякнутую скачать.
P.S. Unity последний, взят с сайта.

pax 10.11.2011 01:17

Ответ: Вопросы от новичка
 
Я не писал про Windows, я писал про меню Window в Unity.

Aikon 10.11.2011 01:19

Ответ: Вопросы от новичка
 
Спасибо! Вот почему оказывается так мало примеров на форумах - они все в Store :)

Aikon 10.11.2011 22:52

Ответ: Вопросы от новичка
 
А не подскажете как сделать следующее:
Есть кучка объектов. Тыкается на любой, выводится текст. Все остальное прекращает обсчитываться, в том числе отключается поворот камеры, управляемой игроком (MouseLook). Ожидается пока повторно кликнут на экран. Тогда надпись убирается и все продолжается дальше.

Насколько понимаю, тут требуется корутины, только вот как их прикрутить?

Пока прикидываю так:
Скрипт, который вешается на объекты имеет обрабочик OnMouseDown, который вызывает статический метод вывести текст.
Скрипт, который вешается на основной объект, содержит корутин, который смотрит, выведен ли текст. Если выведен, то стопится и ожидается пока он уберется.
Правильно? (описал как мог)

Lestar 11.11.2011 00:11

Ответ: Вопросы от новичка
 
Обьявить булевую переменную.Сделать ее статик.По клику менять флаг . Логику засунуть в
PHP код:

if(myBool)
{
 
// Логика



pax 11.11.2011 07:19

Ответ: Вопросы от новичка
 
Еще вариант - найти все работающие объекты и выключить, а потом включить.

PHP код:

MonoBehaviour[] mbs FindObjectsOfType(typeof(MonoBehaviour)) as MonoBehaviour[];
foreach (var 
mb in mbs) {
    
mb.enabled false;


Вероятно понадобится более сложная логика, например запомнить что отключили, а потом включить только что было отключено. Еще вероятнее, что надо будет отключить не только скрипты, а например еще и физические тела. Физические для физических тел нужно будет запомнить скорости движения и вращения и перевести RigidBody в Is Kinematic = true например. Либо не отключать физические тела, а останавливать течение времени.

Aikon 11.11.2011 15:06

Ответ: Вопросы от новичка
 
pax, спасибо. Это больше похоже на правду :)
А как же пауза в играх реализуется? (по сути мне глобальная пауза и нужна)

Lestar 11.11.2011 15:17

Ответ: Вопросы от новичка
 
Time.timeScale=0

pax 11.11.2011 19:21

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от Lestar (Сообщение 209249)
Time.timeScale=0

Так только можно заморозить объекты, работающие в зависимости от времени.

Lestar 11.11.2011 19:47

Ответ: Вопросы от новичка
 
И..? Нужна безгеморойная пауза работайте с классом Time.Хотите изобретать велосипед -искать все обьекты в сцене и работать с каждой группой отдельно,ваше право.

pax 11.11.2011 19:54

Ответ: Вопросы от новичка
 
Через тайм не заблокируешь
PHP код:

void Update()
{
   if(
Input.MouseButtonDown(0))
   {

   }


или
PHP код:

void OnMouseButtonDown()
{



Придется в каждой функции обработчики писать.

Aikon 11.11.2011 22:08

Ответ: Вопросы от новичка
 
Надо подумать. Кажется комбинирование двух подходов поможет мне решить задачу.

Со вторым пунктом разобрался: оказалось при импорте модели из 3ds надо было поставить галку Generate Colliders.

Aikon 25.11.2011 14:51

Ответ: Вопросы от новичка
 
Еще пара вопросов.

На сцене несколько предметов, игрок может тыкнуть по любому (на всех висит один и тот же скрипт обработки) и будет отображен диалог, где игрок может выбрать один из вариантов. У каждого предмета свой диалог (варианты задаются в редакторе).

Как реализовать:
1. Допустим выбрали предмет sphere и вариант 2. Как вызвать заранее неизвестную процедуру sphere_2, т.е. Имя_НомерВарианта? Совсем хорошо, если для каждого предмета обработку ответов можно будет в отдельном файле. Как лучше сделать? (вопрос скорее всего по С#)
2. Использую Screen.cursorLock = true, но есть необходимость отслеживать, что пользователь шевелит мышью по горизонтали. Через Input.mousePosition не получается, поскольку курсор фиксированный.
Попробовал через Input.GetAxis("Mouse X"), получилось не очень. Какие еще есть способы отследить мышь?

pax 25.11.2011 15:02

1. http://unity3d.com/support/documenta...ndMessage.html
2. http://unity3d.com/support/documenta...howCursor.html обычно курсор не лочат если он двигаться должен

UPD:
А с другой стороны про движение по горизонтали:

PHP код:

Input.GetAxis("Mouse X"


Aikon 25.11.2011 15:44

Ответ: Вопросы от новичка
 
1. Оно, спасибо :)
2. Курсор залочен и скрыт, поскольку мышка используется для передвижения (не WASD, а по центру, куда игрок смотрит). Объект выбирается, если игрок на него в упор смотрит и кликает.
Кроме GetAxis и GetAxisRaw, насколько я понял, вариантов больше нет?

pax 25.11.2011 16:29

Ответ: Вопросы от новичка
 
Ну если лочить курсор, то получить - двигалась ли мышка можно только через оси.

RegIon 28.11.2011 10:22

Ответ: Вопросы от новичка
 
Рейкаст матерится на объект,вернее что его нет,код такой
Код:

RaycastHit hit;
        Vector3 fwd = Camera.main.transform.TransformDirection(Vector3.forward);
          if (Physics.Raycast(Camera.main.transform.position, fwd,1))
            Debug.Log(hit.collider.tag.ToString());

Цитата:

NullReferenceException: Object reference not set to an instance of an object
Button1.Update () (at Assets/Scripts/Button1.cs:16)
последняя строка данного кода

pax 28.11.2011 10:46

Ответ: Вопросы от новичка
 
Проверь имеет ли камера в сцене тег "MainCamera". иначе свойство Camera.main не найдет нужную камеру.

RegIon 28.11.2011 19:29

Ответ: Вопросы от новичка
 
Вложений: 1
Вот что я смутил(не без помощи)Вложение 15605

Aikon 05.12.2011 13:33

Ответ: Вопросы от новичка
 
Еще вопрос:
Нужно событие OnMouseDown, т.е. определять, что мышкой кликнули, а не просто держат. Событие надо отлавливать вне зависимости от того, где находится курсор.

Судя по справке OnMouseDown посылается для GUIElement или Collider.
Добавляю GUITexture, который наследник GUIElement, покрывающее весь экран, и вешаю на него скрипт.
Код:

using UnityEngine;
using System.Collections;
public class GameGUI : MonoBehaviour {
        void OnMouseDown()
        {
                Debug.Log("!");
        }
}

Однако фиг - OnMouseDown не приходит. Наверно можно через Box Collider сделать, повесив его перед камерой. Но может быть есть способ проще и лучше?

Nuprahtor 05.12.2011 13:44

Ответ: Вопросы от новичка
 
Event
Вот так можно отлавливать любые нажатия клавиши/мыши и т.п.

pax 05.12.2011 13:50

Ответ: Вопросы от новичка
 
Input.GetMouseButtonDown

Aikon 05.12.2011 14:06

Ответ: Вопросы от новичка
 
Спасибо, помогло :)

Aikon 05.12.2011 19:04

Ответ: Вопросы от новичка
 
Всплыли еще вопросы:
1. Можно программно как то передвинуть курсор, т.е. изменить Input.mousePosition? Поиск по форуму Unity3d привел только к решению с помощью WinAPI, что разумеется не очень.
2. Может кто привести код, как выбирать объекты из под курсора с помощью RayCast (я правильно понимаю, что надо использовать ScreenPointToRay)? Через OnMouseDown() криво работает, потому хочу по менять.

pax 05.12.2011 19:58

Ответ: Вопросы от новичка
 
1. Стандартными средствами - Нет
2. Например тут

Aikon 06.12.2011 16:07

Ответ: Вопросы от новичка
 
Спасибо.
1. Жаль :(
2. Воспользовался, работает. Примерно так же, как и OnMouseDown получилось. Видимо ошибка, где то в применении. На 3D сцене объекты, игрок ходит и нажимает на них, учитывая расстояние от от глаз игрока до пересечения с коллайдером. С разных мест объект по разному кликается. Видимо стоит поиграться с изменением расстояния.

Еще вопрос:
А можно как то колесо прокрутки отслеживать? Не в GUI, а в наследнике MonoBehaviour? В справке про скролл только по GUI нашел.

pax 06.12.2011 16:08

Ответ: Вопросы от новичка
 
Input.GetAxis ("Mouse ScrollWheel")

Aikon 08.12.2011 02:39

Ответ: Вопросы от новичка
 
И снова я тут :)

1. У меня на камеру накладывается пост-эффект, а хочется, чтобы на некоторые объекты его не было. Насколько я понимаю надо их рендерить во вторую камеру, а потом как то добавлять? Можно принцип действий расписать или кодом кинуть?
2. Есть ли в Unity возможность эмулировать жидкие и вязкие тела, напр. стекающую по стене слизь?
3. На GUIText нельзя наложить никакой эффект? (размазать буквы, добавить тень)
4. Можно как то передать параметры в следующую сцену, вызываемую через Application.LoadLevel, кроме как записать их в файл, а при старте прочитать? Наверно можно попробовать в каждой сцене создать Dummy, на который навесить скрипт, содержащий static переменные + set + get на них (или массив) и передавать все через него, но что-то мне кажется, что это не очень правильно.

Lestar 08.12.2011 03:42

Ответ: Вопросы от новичка
 
1.В с цене две камеры .Создаем слой IgnorePostEffect.Обьектам,которые рендеряться без постэффектов назначаем этот слой.Для камеры с постэффектами в настройках Culling Mask снимаем галку с нашего слоя,теперь она не видит эти обьекты,а для второй камеры в том же поле ставим флаг только напротив нашего слоя-она у нас будет рендерить теперь только эти обьекты.Дублируем трансформ с одной камеры на другую,парентим,профит.
2.Нет
3.Создать соответствующий стиль (с размазанными буквами и прочим)и применить
4.Создаем думик Main,на него вешаем скрипт в который пишем наши переменные,в скрипт добавляем
PHP код:

void Awake() 
{
  
DontDestroyOnLoad(gameObject);


При загрузке нового уровня думик не дестроится и соответственно сохраняются значения всех переменных.

pax 08.12.2011 07:07

Ответ: Вопросы от новичка
 
Добавлю:
3. Тень можно добавить вторым GUIText'ом. Вот на счет размыть не знаю. Стили тут не помогут, так как это не GUI
4. Если параметры - не объекты Unity (Текстуры, ГеймоОбжекты и т.д.) то статические переменные любого класса, не обязательно скрипта на каком-то объекте нормальный выход. Есть еще PlayerPrefs - данные сохраняются между запусками игры.

Aikon 08.12.2011 12:56

Ответ: Вопросы от новичка
 
Lestar, спасибо за подробный 1. Буду пробовать, должно получиться :)

pax, в очередной раз спасибо :)
PlayerPrefs то, что нужно. Заодно порешил вопрос с сохранением прогресса игрока (думал нужно будет класс писать).

3. Наверно попробую исхитриться и отрендерить в текстуру (с применением технологии п.1), а уже потом на нее эффект кидать.

Taugeshtu 08.12.2011 13:44

Ответ: Вопросы от новичка
 
Цитата:

3. Наверно попробую исхитриться и отрендерить в текстуру (с применением технологии п.1), а уже потом на нее эффект кидать.
Проще будет рендерить в текстуру всё, что тебе надо размыть из гуя, камерой, которая содержит в себе пост-процесс блюра. Только рендерить придётся не через GUIText/GUITexture (их пост-процессинг не касается), а через квады в сцене. Но там математика нехитрая, ортогональная проекция и пошёл.
Хотя если так и делать, то уж проще вообще весь размывающийся гуй вынести в отдельный слой на эту вот камеру с размытием и отрендерить ей поверх главной камеры.
Надо будет только поэкспериментировать с тем, куда вставлять те элементы гуя, которые размывать не надо..

Aikon 08.12.2011 23:12

Ответ: Вопросы от новичка
 
Lestar, у меня главная камера с эффектами, вторая - без эффектов, обе повесил дочерними на Collider-игрока. Transform у обоих одинаков, так что с позиционированием проблем нет (думаю можно будет поиграться с позиционированием и сделать еще эффект :))
Добавил Layers - IgnoreMainCamera. Добавил кубик, у которого задал Layer = IgnoreMainCamera.
Для главной камеры в Culling Mask снял с IgnoreMainCamera (кубик в окошке предпросмотра пропал).
Для дочерней камеры в Culling Mask убрал все флаги, кроме IgnoreMainCamera (в окошке предпросмотра только кубик).
Однако, когда запускаю сцену - идет рендер только главной камеры, а вот кубика нет. Может надо еще и слой дочерней камеры задать?

Taugeshtu, я подумал, да мне это надо всего для двух экранов - стартового скина с названием игры и надписи - "Вы околели". Так что наверно ручками сделаю надписи, повешу их как текстуры на кубик в ортогональной проекции и забью.
Надо еще 3D Text попробовать.

Nuprahtor 08.12.2011 23:17

Ответ: Вопросы от новичка
 
У камеры также есть параметр глубины отрисовки Depth, попробуй поменять его для одной из камер
+Поиграться с ClearFlags

Aikon 08.12.2011 23:43

Ответ: Вопросы от новичка
 
У главной камеры было Depth = 1 (осталось от скрипта по смене суток), у дочерней 0. Поставил у дочерней Depth = 1.1 и ClearFlags = Depth Only - теперь кубик стал отрисовываться, но возникла другая проблема - кубик затирает объекты с главной камеры, которые стоят перед кубиком.

На самом деле, я использовал не кубик, а стол, на котором лежит книга. Стол рендерится второй камерой, а книга и остальное окружение - главной. Так вот при изменении глубины - книга перестает отрисовываться.

Насколько я понимаю Depth - это просто Z-буффер, т.е. когда мы выводим данные со второй камеры, то все точки лежат как бы сверху, поскольку у нее значение Depth больше.

pax 08.12.2011 23:51

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от Nuprahtor (Сообщение 213147)
+Поиграться с ClearFlags

Поставь Nothing для второй камеры
И проблема решиться ;)

Aikon 09.12.2011 00:02

Ответ: Вопросы от новичка
 
pax, пробовал для второй выставлять - ClearFlags = Don't Clear
Если у второй камеры Depth <= главной, то кубик (=стол) не будет показан.
Если у второй камеры Depth > главной, то кубик (=стол) рисуется, но часть его кусков выпадает при движении камеры, как при Z-файтинге.

pax 09.12.2011 00:02

Ответ: Вопросы от новичка
 
если тебе нужен весь кубик, тогда очищай глубину второй камерой (Depth Only)

Параметр Depth влияет на очередь отрисовки, а не на глубину. Глубину можно стереть (Depth Only), или использовать буфер глубины предыдущей камеры(Don't Clear).

Aikon 09.12.2011 00:08

Ответ: Вопросы от новичка
 
pax, мне нужен кубик, но так, чтобы он не был поверх объектов с главной камеры, а был вписан в сцену с главной камеры, т.е. если перед кубиком поставить шарик (отображаемый, главной камерой), то шарик будет показан, а за ним кубик, отображаемый второй камерой.

Хм, интересно, а вообще это реализуемо?

pax 09.12.2011 00:10

Ответ: Вопросы от новичка
 
Это Don't Clear и камеры должны быть на одной и той же позиции. Проще всего вторую камеру поставить дочерней к первой и установить ей трансформ в ноль, кроме скейла

Aikon 09.12.2011 00:19

Ответ: Вопросы от новичка
 
pax, так и сделал уже. Результат описан выше.
По логике вещей: для двух камер надо указать одинаковое расположение + Depth + для второй Don't Clear. Отрисовка должна быть так: первая камера вывела изображение в буффер, а потом вторая туда нагадила в соответствии с Depth. Вот у меня только подозрение, что сначала генерит вторая камера, а потом уже выводит первая и все затирает, поскольку у нее флаг Culling Mask = Skybox.
Может быть где то можно указать порядок рендера с камер?

pax 09.12.2011 00:37

Ответ: Вопросы от новичка
 
По порядку:
Первая камера - SkyBox, включены все слои, кроме слоя второй камеры. Depth по умолчанию -1.
Вторая камера - Don't Clear. Включен только слой с кубиком. Глубина 0.

У обоих камер одинаковые FOV и плейны. Камеры совмещены.

Все работает. Проверил.

Снова повторю, что порядок рендеринга устанавливается параметром Depth. Камеры выводят картинку начиная с меньшего Depth, заканчивая большим. Т.е. в данном случае сначала -1, потом 0. Если указать 0 и 1 или 10 и 100 то будет то же самое.

Как работает:
1. Первая камера рендерит всю сцену со скайбоксом, но без кубика.
2. Вторая камера использует буфер глубины первой камеры, т.к. не очищает его. Следовательно все что она нарисует будет перекрываться геометрией, выданной первой камерой.

Aikon 09.12.2011 00:57

Ответ: Вопросы от новичка
 
Вот сделал тестовый проект: на сцене две камеры, у главной Depth = -1, у дочерней depth = 0. На главную повешен эффект GrayScale. Вторая камера рендерит только слой Ignore MainCamera, в котором распложен кубик с цветной текстурой.
Спереди кубика шарик, сзади цилиндр. На главную камеру повешен скрипт MouseLook, чтобы можно посмотреть, как все себя ведет в движении. А ведет оно себя говнисто :(

Архив с сырцами для Unity 3.4.2 -http://files.mail.ru/B5D5Z7 (5.3мб)

P.S. Если второй камере поставить Rendering Path = Deferred Lighting, который выставляется на главную камеру, если необходимо отображать тени, то куб начинает вписываться в сцену, однако при этом пост-эффекты, накладываемые на главную камеру, отваливаются.

pax 09.12.2011 01:06

Ответ: Вопросы от новичка
 
Виноват во всем GrayScale эффект. Если его выключить, то все работает нормально.

Aikon 09.12.2011 01:12

Ответ: Вопросы от новичка
 
pax, получается, что либо пост-эффекты на все, либо рендер с двух камер.
Все вместе не будет работать :( Фигня какая то.

pax 09.12.2011 01:24

Ответ: Вопросы от новичка
 
Это вероятно баг. Отправь баг репорт с этой тестовой сценой.

Aikon 09.12.2011 01:28

Ответ: Вопросы от новичка
 
pax, я думаю, что это из-за реализации так: когда постэффект накладывается на отрендеренную схему, то данные Z-буфера теряются.

Отправить не могу, так как у меня Pro-версия из-за таблетки, а не $$$. И мне стыдно :)

pax 09.12.2011 07:17

Ответ: Вопросы от новичка
 
Отправил (хоть тоже не имею лицензии), вдруг смогут исправить.

WISHMASTER35 10.12.2011 17:41

Ответ: Вопросы от новичка
 
Как можно камере background сделать из картинки, а не скайбокса?
Не знаю может так надо или баг, но вчера заметил, что если во время плея переключиться из Game в Scene, то у mainCamera меняется aspect.

Taugeshtu 10.12.2011 18:14

Ответ: Вопросы от новичка
 
Цитата:

Как можно камере background сделать из картинки, а не скайбокса?
Немного костылём:
Вторая камера, рендерит перед главной, у неё в слоях рендера только один-единственный растянутый на всю морду GUITexture или GUI.Label (смотря что тебе больше нравится), у главной камеры Clear flags: Depth only. Как-то так)

Можно извращаться с GL-классом наверное.. И с порядком рендера объектов тоже можно было бы поиграться, но решение со второй камерой будет работать на инди-версии тоже (GL-класс вроде недоступен в инди).

Lestar 10.12.2011 19:51

Ответ: Вопросы от новичка
 
Поставить плейник,на плейник натянуть текстуру.Это буде экономнее чем класс GUI.

WISHMASTER35 10.12.2011 20:17

Ответ: Вопросы от новичка
 
Lestar, что за плейник?
C# не очень хорошо знаю и возникает одна проблема. Есть метод который по координате курсора находит позицию на карте. Если позиция найдена то возвращаю ее в Vector2, а если не найдена, то хочу написать return null, но на это ругается компилятор. Как такое правильно сделать?

pax 10.12.2011 20:50

Ответ: Вопросы от новичка
 
Плейник - Plane

Vector2 не может быть null, так как это не ссылочный тип. Можно поступить следующим образом:

PHP код:

public Vector2PointOnMap()
{
    
RaycastHit hit;
    
Ray ray Camera.mainCamera.ScreenPointToRay(Input.mousePosition);

    if (
Physics.Raycast(rayout hit))
    {
        return 
hit.point;
    }
    return 
null;
}

...

var 
point PointOnMap();

if(
point.HasValue)
{
     
Vector2 pos point.Value;
     
// действие



WISHMASTER35 11.12.2011 02:09

Ответ: Вопросы от новичка
 
pax, спасибо. В Unity нету классов векторов с integer? А то позицию на карте мне было бы лучше хранить как два инта т.к. карта тайловая.
Насчет Plane, зачем там так много треугольников? Не могли двумя обойтись( Теперь, если надо что-то сделать оптимизировано, то надо свой Plane рисовать.

pax 11.12.2011 11:34

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от WISHMASTER35 (Сообщение 213484)
В Unity нету классов векторов с integer? А то позицию на карте мне было бы лучше хранить как два инта т.к. карта тайловая.

Нету. Можно легко самому написать.


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

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