Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
Мишка Косолапый :)
 Аватар для zuxa-zuxa
285 / 255 / 86
Регистрация: 15.02.2012
Сообщений: 1,511

Rotation камеры на Android

12.01.2016, 18:41. Показов 3522. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сделал анимацию поворота камеры по z.
Сделал вывод на экран Rotation камеры.
Когда тестирую на компьютере в Unity, то координаты отображаются хорошо, да и анимация проигрывается тоже хорошо. При переносе на Android координаты становятся NaN ну и ничего нет в камере
Как это исправить?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.01.2016, 18:41
Ответы с готовыми решениями:

Фото с камеры (Android)
Не могу сделать фото, Осипов утверждает, что просто cameracomponent.Active:=true и после того как юзер сделает фото, отловить событие. Но...

Беспроводная передача с веб камеры на Android
Добрый день! Занимаюсь программированием и электроникой уже почти 3 года и наконец-то появилась у меня идея. Можно-ли передать беспроводной...

Посоветуйте смартфон на Android с большой внутренней памятью и без камеры
Доброго времени суток!!! Посоветуйте телефон. Работаю на военном предприятии и в связи с этим у нас запрещены телефоны с камерами,...

12
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
12.01.2016, 21:42
zuxa-zuxa, тут не телепаты, покажите код
0
Мишка Косолапый :)
 Аватар для zuxa-zuxa
285 / 255 / 86
Регистрация: 15.02.2012
Сообщений: 1,511
13.01.2016, 08:27  [ТС]
Cr0c, итак, что есть закинул как скриншоты.
По сути просто камера на которой 12 анимаций поворота, которые запускаются через скрипт так:
C#
1
anim.SetInteger ("g", 2);
С этой переменной g сделал переходы в аниматоре, тоже закину скрин.
Вот всё что имеется, на компьютере работает отлично, на андроиде не работает. Чтобы проверять добавил ещё вот что:
C#
1
2
3
4
5
6
7
8
9
void OnGUI()
 
    {
        GUI.color = Color.blue;
 
        GUI.Label(new Rect(30, 150, 300, 200), c.transform.rotation.x + " " + c.transform.rotation.y + " " + c.transform.rotation.z);
 
// с - это камера
    }
На компьютере хорошо отображает координаты, на телефоне выводит NaN NaN NaN
Ну после включения анимации, до и на телефоне работает.
Миниатюры
Rotation камеры на Android   Rotation камеры на Android   Rotation камеры на Android  

Изображения
 
0
Мишка Косолапый :)
 Аватар для zuxa-zuxa
285 / 255 / 86
Регистрация: 15.02.2012
Сообщений: 1,511
24.01.2016, 15:00  [ТС]
UP темы, может кто поможет?
Пробовал всяко разно, но анимация rotation.z камеры не работает на Android, но работает на компьютере.
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
24.01.2016, 20:36
zuxa-zuxa, вообще, rotation - это не Vector3, а Quaternion, у которого 4 поля. А без анимации крутить кодом никак? Я с анимацией не разбирался ещё, как-то не было необходимости.
0
Мишка Косолапый :)
 Аватар для zuxa-zuxa
285 / 255 / 86
Регистрация: 15.02.2012
Сообщений: 1,511
24.01.2016, 21:45  [ТС]
Я думал анимацией легче будет, а как скриптом плавно поворачивать камеру в 4 стороны? ну углы 0,90,180,270
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
24.01.2016, 23:40
zuxa-zuxa,
камера поворачивается в одну из сторон или вокруг объекта летает в одно из положений?
0
Мишка Косолапый :)
 Аватар для zuxa-zuxa
285 / 255 / 86
Регистрация: 15.02.2012
Сообщений: 1,511
25.01.2016, 19:40  [ТС]
Камера прикреплена следить за игроком
0
Мишка Косолапый :)
 Аватар для zuxa-zuxa
285 / 255 / 86
Регистрация: 15.02.2012
Сообщений: 1,511
27.01.2016, 14:19  [ТС]
Помогитеее
0
Быдлокодер
 Аватар для Darky
512 / 298 / 85
Регистрация: 22.11.2009
Сообщений: 892
27.01.2016, 18:48
http://docs.unity3d.com/Script... .Lerp.html
1
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
27.01.2016, 21:38
Darky, багует Quaternion.Lerp, лучше Quaternion.Slerp
This is faster than Slerp but looks worse if the rotations are far apart.
как говорит справка, да и был недавно вопрос на схожем форуме
Странное дело.
Quaternion.Lerp(transform.rotation, target, t);
при t=0.5 объект почему-то повёрнут полностью, а не на половину :-?
Никто не знает почему это может быть?
Добавлено через 50 секунд
zuxa-zuxa, камера ставится на фиксированные положения или перелетает на 90 градусов поочередно?
1
Мишка Косолапый :)
 Аватар для zuxa-zuxa
285 / 255 / 86
Регистрация: 15.02.2012
Сообщений: 1,511
28.01.2016, 21:10  [ТС]
Сделал вот так вращение:
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
public void left()
    {
        if (!work) {
            work = true;
            napr = -1;
            if (Mathf.Abs (transform.eulerAngles.z - 0) < 2f) {
                gradus = 270;
                Physics.gravity = new Vector3 (-G, 0, 0);
            //  dampTime = dt;
            }
            if (Mathf.Abs (transform.eulerAngles.z - 270) < 2f) {
                gradus = 180;
                Physics.gravity = new Vector3 (0, G, 0);
            //  dampTime = dt;
            }
            if (Mathf.Abs (transform.eulerAngles.z - 180) < 2f) {
                gradus = 90;
                Physics.gravity = new Vector3 (G, 0, 0);
            //  dampTime = dt;
            }
            if (Mathf.Abs (transform.eulerAngles.z - 90) < 2f) {
                gradus = 0;
                Physics.gravity = new Vector3 (0, -G, 0);
            //  dampTime = dt;
            }
        }
            
    }
 
    public void right()
    {
        if (!work) {
            work = true;
            napr = 1;
            if (Mathf.Abs (transform.eulerAngles.z - 0) < 2f) {
                gradus = 90;
                Physics.gravity = new Vector3 (G, 0, 0);
                dampTime = dt;
            }
            if (Mathf.Abs (transform.eulerAngles.z - 270) < 2f) {
                gradus = 0;
                Physics.gravity = new Vector3 (0, -G, 0);
                dampTime = dt;
            }
            if (Mathf.Abs (transform.eulerAngles.z - 180) < 2f) {
                gradus = 270;
                Physics.gravity = new Vector3 (-G, 0, 0);
                dampTime = dt;
            }
            if (Mathf.Abs (transform.eulerAngles.z - 90) < 2f) {
                gradus = 180;
                Physics.gravity = new Vector3 (0, G, 0);
                dampTime =dt;
            }
        }
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    void FixedUpdate () 
    {
        if (work) {
            if (dampTime > dt)
                dampTime -= 0.05f;
            transform.RotateAround (new Vector3 (0, 0, 0), new Vector3 (0, 0, napr), 3);
            if (Mathf.Abs (transform.eulerAngles.z - gradus) < 2.5f) {
                work = false;
                transform.eulerAngles = new Vector3 (0, 0, gradus);
            }
        } else {
            if (dampTime < 0.25f)
                dampTime += 0.01f;
        }
        Vector3 point = GetComponent<Camera>().WorldToViewportPoint(new Vector3(target.position.x, target.position.y+0.5f,target.position.z));
        Vector3 delta = new Vector3 (target.position.x, target.position.y + 0.5f, target.position.z)- GetComponent<Camera>().ViewportToWorldPoint(new Vector3(0.5f, 0.5f, point.z)); //(new Vector3(0.5, 0.5, point.z));
        Vector3 destination = transform.position + delta;
        transform.position = Vector3.SmoothDamp(transform.position, destination, ref velocity, dampTime);
        
    }
Но теперь ни как не могу настроить корректное перемещение камеры.
dampTime это как бы время, через которое камера начинает следовать за персонажем, чтобы создать эффект скорости. Он для меня важен. Но если этот эффект оставлять, то при таком вращении получается беда, не красиво.
Если же dampTime ставить в ноль, а когда повернули плавно нарастить до 0,25 получается что то лучше, но всё равно не то что нужно
Нет такого скрипта, чтобы следить за обьектом, но чтобы корректно работал при поворотах камеры?
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
29.01.2016, 11:37
zuxa-zuxa,
C#
1
Physics.gravity = new Vector3 (G, 0, 0);
причем здесь вращение камеры? О_о
Всё можно сделать проще же. Впрочем, напишу с утра уже.

Добавлено через 9 часов 46 минут
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
39
40
41
42
43
44
45
46
47
48
49
50
using UnityEngine;
using System.Collections;
 
public class HardCamCtrl : MonoBehaviour {
    public GameObject target; // объект сопровождения (ГО)
    private Rigidbody _rb; // ссылка на Rigidbody
    public GameObject cam_holder; // пустой го с дочерней камерой (холдер)
    public float cam_speed = 1f; // скорость поворота камеры
    public float shift_by_speed = 2f; // множитель для удаления камеры от объекта
    private bool isRotating = false; // внутренний флаг для корутины
 
    // Use this for initialization
    void Start () {
        cam_holder.transform.position = target.transform.position; // холдер ставим на объект
        cam_holder.transform.forward = target.transform.forward; // совмещаем направление ГО и холдера
        _rb = target.GetComponent<Rigidbody>(); // сохраняем ссылку на Rigidbody
    }
    
    void Update () {
            cam_holder.transform.position = target.transform.position - _rb.velocity * shift_by_speed; // делаем сдвиг холдера от ГО в зависимости от скорости ГО
    }
 
    public void ClickLeft() // кнопка -90 градусов
    {
        StartCoroutine( RotateCam(cam_speed, cam_holder.transform.right) ); // запускаем поворот и даём конечное направление
    }
    public void ClickRight() // кнопка +90 градусов
    {
        StartCoroutine(RotateCam(-cam_speed, -cam_holder.transform.right));  // запускаем поворот и даём конечное направление
    }
    public void ClickRev() // кнопка +180 градусов
    {
        StartCoroutine(RotateCam(cam_speed*2, -cam_holder.transform.forward)); // запускаем поворот и даём конечное направление
    }
 
    IEnumerator RotateCam(float spd, Vector3 dir)
    {
        if (!isRotating) // если поворот не запущен
        {
            isRotating = true; // блокируем корутину, чтобы при её работе её ещё раз не запустили
            for (int i = 0; i <= 90f / cam_speed; i++)
            {
                cam_holder.transform.Rotate(Vector3.up, spd, Space.World); // поворачиваем
                yield return null; // ждём следующий кадр
            }
            cam_holder.transform.forward = dir; // задаём конечное направление для нивелирование погрешности
            isRotating = false; // разблокируем корутину
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.01.2016, 11:37
Помогаю со студенческими работами здесь

Transform.rotation
Для стратегии камера должна не только передвигаться, но и менять угол просмотра. Для этого, при прокрутке колесика мыши мне нужно делать...

C# freeze rotation
C# под unity3D. Нужно через скрипт отклбчить freeze rotation Z

Можно ли заморозить rotation x и y ?
Когда объекта начинает двигаться за курсором у него начинает меняться значение поворота по x и y на 90 градусов и так как это 2д спрайт он...

Transform.rotation. Углы
У меня есть камера, rotation(90,0,0). Необходимо повернуть её по Z при нажатии стрелки влево, но проблема не в этом. Дело в том, что когда...

Child component rotation over network
Добрый день! У меня возникли сложности в создание небольшой сетевой игры в Unity 3D. Суть игры в том что в сцене 2 игровых объекта...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru