Как сделать поиск объекта камерой и автомаштаб?

Программирование на Юнити.

Как сделать поиск объекта камерой и автомаштаб?

Сообщение AndrewSt 29 окт 2010, 17:50

Необходимо такое же действие как в редакторе при двойном нажатии на иерархии сцены.

Подскажите алгоритм или средства для его реализации.
Допустим повернуть камеру на пивот объекта без проблем.
А как подогнать масштаб?
AndrewSt
UNIт
 
Сообщения: 72
Зарегистрирован: 10 дек 2009, 13:36
Откуда: СПБ
  • ICQ

Re: Как сделать поиск объекта камерой и автомаштаб?

Сообщение Zaicheg 29 окт 2010, 18:05

... //поворот
Transform.Translate(Vector3.forward, Space.Self);
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Как сделать поиск объекта камерой и автомаштаб?

Сообщение AndrewSt 29 окт 2010, 20:51

Zaicheg писал(а):... //поворот
Transform.Translate(Vector3.forward, Space.Self);

Не совсем понял, как мне это можно применить.

Может меня не совсем правильно поняли.
Представим что область экрана поделили на клетки 3х3
При переходе камеры на объект. Объект должен быть установлен в центральную клетку и занимать максимальную площадь центральной клетки.
AndrewSt
UNIт
 
Сообщения: 72
Зарегистрирован: 10 дек 2009, 13:36
Откуда: СПБ
  • ICQ

Re: Как сделать поиск объекта камерой и автомаштаб?

Сообщение Zaicheg 29 окт 2010, 20:56

Синтаксис:
Используется csharp
bool lookComplete;

void Update(){
if (Input.GetKeyDown(KeyCode.B)) {
transform.LookAt(target);
lookComplete = true; }

if (lookComplete)
while (Vector3.Distance(transform.position, target.position) > 3f)
transform.Translate(Vector3.forward * Time.deltaTime, Space.Self); }


Камера уставится на цель, находясь от неё в 3 метрах.
Цель будет по центру экрана с нужным вам масштабам (вместо 3-х метров подставите).
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Как сделать поиск объекта камерой и автомаштаб?

Сообщение AndrewSt 29 окт 2010, 22:31

Zaicheg писал(а):
Синтаксис:
Используется csharp
bool lookComplete;

void Update(){
if (Input.GetKeyDown(KeyCode.B)) {
transform.LookAt(target);
lookComplete = true; }

if (lookComplete)
while (Vector3.Distance(transform.position, target.position) > 3f)
transform.Translate(Vector3.forward * Time.deltaTime, Space.Self); }


Камера уставится на цель, находясь от неё в 3 метрах.
Цель будет по центру экрана с нужным вам масштабам (вместо 3-х метров подставите).



Видать вы меня не понимаете.
Представьте есть сцена дом на подоконике стоять горшки с цветами.
Ну вот например цель ДОМ - при автомаштабе дом полностью влазит в центральную клетку.
Если цель горшок с вкетами - то в клетку помещается весь горшок.

Т.е задать жестко расстояние до цели в 3 метра не получится надо как то определять размеры объекта на экране и приближатся на нужное расстояние.
Вот вчем проблема.

Как правильно выбрать расстояние до объекта?
AndrewSt
UNIт
 
Сообщения: 72
Зарегистрирован: 10 дек 2009, 13:36
Откуда: СПБ
  • ICQ

Re: Как сделать поиск объекта камерой и автомаштаб?

Сообщение Pyx 29 окт 2010, 22:45

Camera.WorldToScreenPoint преобразует трансформ обьекта в координаты на экране.Через Screen.width ,Screen.height определяете размер вашего квадрата и в цикле двигаете камеру,пока граничные области обьекта не подойдут к границам вашего квадрата.
Как правильно выбрать расстояние до объекта?
Vector3.Distance
Pyx
 

Re: Как сделать поиск объекта камерой и автомаштаб?

Сообщение AndrewSt 29 окт 2010, 23:44

Pyx писал(а):пока граничные области обьекта не подойдут к границам вашего квадрата.


Вот именно это мне и не понятно. Как это можно сделать.
AndrewSt
UNIт
 
Сообщения: 72
Зарегистрирован: 10 дек 2009, 13:36
Откуда: СПБ
  • ICQ

Re: Как сделать поиск объекта камерой и автомаштаб?

Сообщение Neodrop 29 окт 2010, 23:48

Видимо Rect.Contain :-?
Я где то тут на форуме давал код для определения квадрата на экране, вписывающего в себя объект.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Как сделать поиск объекта камерой и автомаштаб?

Сообщение Pyx 30 окт 2010, 00:18

AndrewSt писал(а):
Pyx писал(а):пока граничные области обьекта не подойдут к границам вашего квадрата.


Вот именно это мне и не понятно. Как это можно сделать.

Добавьте обьекту BoxCollider и через BoxCollider.size определяйте границы вашего обьекта,переведите их в экранные координаты,сравнивайте с вашим квадратом и двигайте камеру в нужном вам направлении.
Pyx
 

Re: Как сделать поиск объекта камерой и автомаштаб?

Сообщение Zaicheg 30 окт 2010, 09:38

Pyx писал(а):Добавьте обьекту BoxCollider и через BoxCollider.size определяйте границы вашего обьекта,переведите их в экранные координаты,сравнивайте с вашим квадратом и двигайте камеру в нужном вам направлении.

collider.bounds или mesh.bounds поудобнее чуток будет.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Как сделать поиск объекта камерой и автомаштаб?

Сообщение AndrewSt 02 ноя 2010, 23:27

Опять нужна помощь.
Что бы получить экранные координаты делаю так.

Синтаксис:
Используется csharp
        min = collider.bounds.min;
        max = collider.bounds.max;
       
        Vector3[] vertecs = new Vector3[]{
            min,
            max,
            new Vector3(max.x, min.y, min.z),
            new Vector3(min.x, max.y, min.z),
            new Vector3(min.x, min.y, max.z),

            new Vector3(max.x, max.y, min.z),
            new Vector3(min.x, max.y, max.z),
            new Vector3(max.x, min.y, max.z)
        };

        Vector3 minimum = camera.WorldToScreenPoint(collider.bounds.center);
        Vector3 maximum = camera.WorldToScreenPoint(collider.bounds.center);

        foreach (Vector3 vert in vertecs)
        {
            Vector3 screenPos = camera.WorldToScreenPoint(vert);

            if (screenPos.x < minimum.x)
                minimum.x = screenPos.x;
            if (screenPos.y < minimum.y)
                minimum.y = screenPos.y;

            if (screenPos.x > maximum.x)
                maximum.x = screenPos.x;
            if (screenPos.y > maximum.y)
                maximum.y = screenPos.y;
        }
 


Но как мне преобразовать обратно эти координаты пытаюсь так:
Vector3 maximum = camera.ScreenToWorldPoint(maximum);

но переводится что то не то :( и еще не понятно какая координата Z присвоится ей.
Объясните кто-нибудь.
AndrewSt
UNIт
 
Сообщения: 72
Зарегистрирован: 10 дек 2009, 13:36
Откуда: СПБ
  • ICQ

Re: Как сделать поиск объекта камерой и автомаштаб?

Сообщение DbIMok 03 ноя 2010, 05:07

правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.8k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Как сделать поиск объекта камерой и автомаштаб?

Сообщение AndrewSt 03 ноя 2010, 09:21


Там примерно тоже самое что и у меня. В скрипте не переводится экранные координаты обратно в мировые, а рисуется бокс прямо GUI в экранных координатах.

Я же хочу перевести все координаты в мировые и проделать какую-то операцию с ними.
Так что вопрос открыт.
AndrewSt
UNIт
 
Сообщения: 72
Зарегистрирован: 10 дек 2009, 13:36
Откуда: СПБ
  • ICQ


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6