forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Общие вопросы (http://forum.boolean.name/forumdisplay.php?f=166)
-   -   Проблемы разработки от EvilOkta (http://forum.boolean.name/showthread.php?t=17911)

EvilOkta 16.10.2013 00:33

Ответ: Передача переменной в метод
 
спасибо, в справке не нашел что можно с помощью & отследить сразу две )

EvilOkta 06.03.2014 12:09

Ответ: Передача переменной в метод
 
Ребят подскажите такой вопрос:
в общем, работаю сейчас над навигацией камеры, сделал скрипт перемещения камеры и вращения, все делал через translate и rotation.
Перемещение работает нормально, меня устраивает по удобству, а вот с вращением беда выглядит убого и по удобству тоже не особо хорошо получилось.
Начал думать и читать справки. Появилась идея сделать вращение (и перемещение до кучи) через Rigidbody, AddForce и AddTorque (в режимах импульса и силы) отслеживая перемещения мыши и генерируя преобразованные векторы направления и вращения. По задумке такую систему можно будет потом безболезнено перенести на андроид для управления жестами.

Собственно вопрос: насколько это правильно? Т.к. знаю что каждый кто разрабатывает игру рано или поздно сталкивается с навигацией камеры, притом на одном из ранних этапов разработки. Какой метод оптимальнее подходит?
Расскажите как вы реализуете работу с камерой, может у вас есть какие-то алгоритмические решения выработанные с опытом.

Mr_F_ 06.03.2014 12:23

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

EvilOkta 06.03.2014 15:05

Ответ: Передача переменной в метод
 
Цитата:

Сообщение от Mr_F_ (Сообщение 276174)
какая камера нужна то для какого вида?

вид стратегический, над полем боя. Что-то отдаленно похожее как в игре "Проклятые земли"

по поводу ригидбоди задумался т.к. это в теории (понимаю что извратство) позволит сделать навигацию камеры с помощью жестов мыши и соответственно жестом пальцами в тач-варианте (аналог: скроллинг веб-страницы на планшете). Передавать и вращать не физическим движком а используя Transform слишком деревяно выходит. Или все-таки это более оптимальный вариант просто требующий доработки?

Mr_F_ 06.03.2014 17:19

Ответ: Передача переменной в метод
 
я не понимаю как связан физический движок и жесты мыши.

EvilOkta 06.03.2014 17:41

Ответ: Передача переменной в метод
 
Цитата:

Сообщение от Mr_F_ (Сообщение 276181)
я не понимаю как связан физический движок и жесты мыши.

к примеру слайд мышью: в одной точке зажать ЛКМ, в другой отпустить, получится вектор направления который можно приложить к камере заставив ее двигаться в этом направлении с последующим затуханием (drag инерция при использовании rigidbody), то же самое слайд мыши при нажатии ПКМ, только для определения силы вращения (что-то вроде мауслук но с инерцией).
Я просто хочу организовать доводку и нативное управление и переложить расчеты на физ.движок а не на геометрические и физические формулы определения кватерниона вращения, направления движения и величины векторов с которыми перемещение и вращение происходит.

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

Или все что я расписал выше легко реализуется без rigidbody?

pax 06.03.2014 18:19

Ответ: Передача переменной в метод
 
А такое пробовал?
http://docs.unity3d.com/Documentatio...moothDamp.html

EvilOkta 07.03.2014 10:49

Ответ: Передача переменной в метод
 
Цитата:

Сообщение от pax (Сообщение 276194)

Спасибо, попробую. Плюс в справке нашел аналог для вращения - буду изучать

EvilOkta 13.05.2014 12:06

Ответ: Передача переменной в метод
 
Определить координаты мыши на плоскости в пространстве можно только рейкастом или есть какие-то математические варианты, типа проекции экранных координат в мировые?
Если только рейкаст хотел уточнить - запускать луч каждый Update не слишком будет грузить ресурсы компьютера? Или есть какие-то методы оптимизации?

pax 13.05.2014 17:54

Ответ: Передача переменной в метод
 
Тебе нужно:
  1. Camera.ScreenPointToRay
  2. Plane (Plane.Raycast)

EvilOkta 27.05.2014 18:06

Ответ: Передача переменной в метод
 
ох туплю.... как проверить число типа float на целочисленность, т.е. что у его текущего значения нет дробной части?

pax 27.05.2014 18:22

Ответ: Передача переменной в метод
 
if(Mathf.Abs(floatVar - (int)floatVar) < 0.00001f){

}

EvilOkta 10.06.2014 23:44

Ответ: Передача переменной в метод
 
а как из рейкаста удалить взаимодействие со группой объектов кроме определенных? Чтобы информация о столкновении считывалась только с определенных объектов?
Чувствую надо копать в слоях, но подскажите хотя бы принцип
upd. вроде есть способ через Layer Mask пока роюсь в справках

seaman 11.06.2014 15:09

Ответ: Передача переменной в метод
 
Код:

static bool Raycast(Vector3 origin, Vector3 direction, float distance = Mathf.Infinity, int layerMask = DefaultRaycastLayers);
layerMask - маска слоя, которая используется для селективного игнорирования коллайдеров при пускании луча.
Про слои тут:
Layers
Там есть прямо пример селективного пускания лучей.

EvilOkta 16.06.2014 10:19

Ответ: Передача переменной в метод
 
Цитата:

Сообщение от seaman (Сообщение 282488)
Код:

static bool Raycast(Vector3 origin, Vector3 direction, float distance = Mathf.Infinity, int layerMask = DefaultRaycastLayers);
layerMask - маска слоя, которая используется для селективного игнорирования коллайдеров при пускании луча.
Про слои тут:
Layers
Там есть прямо пример селективного пускания лучей.

Спасибо, вроде разобрался но ползая по справкам и форумам не понял немного по слоям:
- можно ли задавать лучу группу слоев а не один (например - поверхность уровня, динамичные объекты, статичные объекты, другие. Или в этом случае пускается например два луча отдельно по каждому слою?
- программно менять слой в рантайме, возможно ли? например объект перемещать из статичных в динамичные и т.д


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

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