Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/25: Рейтинг темы: голосов - 25, средняя оценка - 4.92
8 / 8 / 4
Регистрация: 11.03.2015
Сообщений: 212
1

Камера на объект

29.03.2016, 17:00. Показов 5185. Ответов 14

Author24 — интернет-сервис помощи студентам
Добрый день, есть скрипт, который при клике на объект выводит его изображение, но не могу понять как полностью запихнуть в камеру весь объект.

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


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
void Start () {
        deviceCamera = new GameObject ();
        deviceCamera.AddComponent<Camera>();
        deviceCamera.transform.position = new Vector3 (transform.position.x - GetComponent<Renderer> ().bounds.size.x, 
                                                       transform.position.y, 
                                                       transform.position.z); //устанавливаем позицию камеры перед объектом
 
        deviceCamera.transform.Rotate (0, 90, 0); //поворачиваем камеру, чтобы смотрела на объект
        
        deviceCamera.GetComponent<Camera> ().orthographic = true; 
        var temp = deviceCamera.GetComponent<Camera>().pixelRect;
 
        deviceCamera.GetComponent<Camera>().enabled = false;
    }
 
    void OnMouseDown()
    { 
        //deviceCamera = new Camera ();
 
        deviceCamera.GetComponent<Camera>().enabled = !(deviceCamera.GetComponent<Camera>().enabled); //включать и выключать камеру
    }
 
    // Update is called once per frame
    void Update () {
        float w = Screen.width ; //ширина игрового экрана
        float h = Screen.height ; //высота игрового экрана
        float wo = GetComponent<Renderer> ().bounds.size.x; //длина объекта (пульта)
        float ho = GetComponent<Renderer> ().bounds.size.z; //ширина объекта (пульта)
        float proportion =  w / h; 
        float camHeight = (w/4) / proportion;
        if (GetComponent<Renderer> ().bounds.size.x > GetComponent<Renderer> ().bounds.size.z) { //если длина больше ширины
            deviceCamera.GetComponent<Camera> ().orthographicSize = ((GetComponent<Renderer> ().bounds.size.x / 2) * camHeight) / (w / 4); //то размер камеры установим относительно длины
        } else {
            deviceCamera.GetComponent<Camera> ().orthographicSize = GetComponent<Renderer> ().bounds.size.z / 2; //иначе относительно ширины
        }
 
        deviceCamera.GetComponent<Camera> ().pixelRect = new Rect (w - w/4, 0, w/4, camHeight); //размер окна камеры на игровой сцене
    }
Заранее спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.03.2016, 17:00
Ответы с готовыми решениями:

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

Может ли объект-член, или объект-элемент достучаться к содержащему его?
Предположим, class A { ... }; class B { .... A a; ... };

Есть кнопка и объект. Как по клику на кнопку закрасить объект?
Есть кнопка (допустим красная). По клику на кнопку нужно чтобы закрасился объект этим же цветом....

Как увидеть объект Session и объект Server из модуля класса?
В модуле класса пишу: 'Provider=Microsoft.Jet.OLEDB.4.0;' &amp; _ 'Data Source=' &amp;...

14
103 / 104 / 54
Регистрация: 23.03.2016
Сообщений: 462
29.03.2016, 17:52 2
При открытии камеры отправляй сообщение на все камеры, чтобы они отключились, запусти камеру, которая нужна.

http://wiki.unity3d.com/index.... r_Extended
1
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
29.03.2016, 19:02 3
Почему нельзя одну камеру перемещать к объекту?
0
8 / 8 / 4
Регистрация: 11.03.2015
Сообщений: 212
30.03.2016, 16:39  [ТС] 4
Cr0c, Потому-что я не знаю как это сделать. Объект на сцене много и я так понимаю, скрипт должен висеть на каждом объекте. Или предлагается повесить скрипт на пустой го, который будет их искать и передавать параметры с каждого найденного объекта? А как тогда заставить по клику на объект заставить появиться обзору с камеры?
0
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
30.03.2016, 21:56 5
Naomis, камера идёт на рендер текстуру? Что мешает сделать
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public Vector3 distance; // вектор сдвига камеры от объекта
public GameObject _camera; // ссылка на камеру
public GameObject target {
 get ;
 set { 
  target = value;
  if (value != null)
  { _camera.transform.position = value.transform.position - distance;
  _camera.transform.SetParent(value.transform, true); } // не помню что тут должно быть - true или false
  else {
  _camera.transform.SetParent(null, true);
  }
 }
}
1
8 / 8 / 4
Регистрация: 11.03.2015
Сообщений: 212
31.03.2016, 18:40  [ТС] 6
Cr0c, что такое рендер текстура?
0
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
31.03.2016, 22:44 7
Naomis, это специальная текстура, у которой источник не загруженное изображение, а вид с какой-либо камеры.
RenderTexture
Camera.targetTexture
1
8 / 8 / 4
Регистрация: 11.03.2015
Сообщений: 212
01.04.2016, 00:04  [ТС] 8
Quat1111, а каким образом? Скрипт конечно один, но он весит на большом количестве объектов. Куда, кому и что передавать?

Добавлено через 16 минут
Quat1111, а что и кому отправлять? Скрипт же один, а объектов на которых он весит много. В чём суть статьи, не совсем вкурил, я с английским, к сожалению на Вы?
0
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
01.04.2016, 07:55 9
Naomis, рейкастить при клике, выставлять камеру возле объекта. Всех делов-то. И не надо на каждый объект кидать скрипт ))
1
8 / 8 / 4
Регистрация: 11.03.2015
Сообщений: 212
01.04.2016, 11:02  [ТС] 10
Cr0c, то есть на пустой объект вешаем скрипт в котором есть твой код, в метод OnMouseEnter ? Что-то я совсем не понимаю... А как он объект с vektor3 получает?
0
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
01.04.2016, 11:11 11
Naomis, рейкаст по клику даст объект (если попал в него), по тегу отсеиваем неподходящие

Добавлено через 50 секунд
В обычный апдейт, не надо OnMouse
1
8 / 8 / 4
Регистрация: 11.03.2015
Сообщений: 212
01.04.2016, 11:33  [ТС] 12
Cr0c, у меня есть код в update, куда мне тогда передать таржет? Или как-то работать с сылкой на камеру? Прошу прощения, но я правда мало, чего понимаю.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void Update () {
        float w = Screen.width ; //ширина игрового экрана
        float h = Screen.height ; //высота игрового экрана
        float wo = GetComponent<Renderer> ().bounds.size.x; //длина объекта (пульта)
        float ho = GetComponent<Renderer> ().bounds.size.z; //ширина объекта (пульта)
        float proportion =  w / h; 
        float camHeight = (w/4) / proportion;
        if (GetComponent<Renderer> ().bounds.size.x > GetComponent<Renderer> ().bounds.size.z) { //если длина больше ширины
            deviceCamera.GetComponent<Camera> ().orthographicSize = ((GetComponent<Renderer> ().bounds.size.x / 2) * camHeight) / (w / 4); //то размер камеры установим относительно длины
        } else {
            deviceCamera.GetComponent<Camera> ().orthographicSize = GetComponent<Renderer> ().bounds.size.z / 2; //иначе относительно ширины
        }
 
        deviceCamera.GetComponent<Camera> ().pixelRect = new Rect (w - w/4, 0, w/4, camHeight); //размер окна камеры на игровой сцене
    }
0
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
01.04.2016, 12:42 13
Naomis, рендер текстуру сделали? Камеру к ней прицепили? Рейкастом объект клика нашли?
1
8 / 8 / 4
Регистрация: 11.03.2015
Сообщений: 212
01.04.2016, 15:06  [ТС] 14
Cr0c, так понятнее, сей час разберусь, спасибо.

Добавлено через 1 час 43 минуты
Cr0c, Разобрался с рендер текстурой и камерой. А вот рейкаст клика... Нашёл что-то подобное, но как-то не вкуриваю.
0
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
01.04.2016, 15:25 15
Naomis,
C#
1
2
3
4
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, Constants.cMaxRayCastDistance))
 {GameObject rayCastedGO = hit.collider.gameObject;} else { GameObject rayCastedGO = null; }
Вот и объект найден - это rayCastedGO. Двигайте камеру к нему как душе угодно.
1
01.04.2016, 15:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.04.2016, 15:25
Помогаю со студенческими работами здесь

Если объект добавлять в 2 контейнера, то в них будет ссылка или новый объект?
Есть объект - obj. Последовательно добавляю его в два контейнера container1.add(obj);...

Зачем при перегрузке оператора >> в параметр включать ссылку на объект, а не сам объект?
Зачем в параметры функции включать ссылку на объект: istream &amp;operator&gt;&gt;(istream &amp;stream, myclass...

Есть ссылка на объект. Можно ли изменить объект, который хранится по этому адресу?
Есть ссылка на объект. Можно ли изменить объект, который хранится по этому адресу? Т.е. не меняя...

Проблема с массивами + System.NullReferenceException: "Ссылка на объект не указывает на экземпляр объект
Ошибка выскакивает на atsakymai = new string; В первой форме //ФОРМА 2: public partial...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru