Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
399 / 308 / 104
Регистрация: 07.05.2017
Сообщений: 2,221

Проблема с управлением камерой и ее работой с порталами

04.07.2019, 16:41. Показов 1008. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
доброго времени суток форумчане !
накидал простенькое управление камерой и капсулой (пока условным игроком).
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 class PlayerCapsule : MonoBehaviour
{
    private Rigidbody rb;
 
    [SerializeField] Transform camPLayer;
    [Space(8)] [SerializeField] int jumpImpulse = 1;
    [SerializeField] float forceRotation;
    [SerializeField] [Range( 1, 10 )] float speed = 1;
 
    void Start()
    {
        camPLayer = GameObject.FindGameObjectWithTag("MainCamera").transform;
        rb = GetComponent<Rigidbody>();  
    }
 
    private void LateUpdate()
    {
        float camRotX = Input.GetAxis("Mouse Y")*forceRotation;
        float camRotY = Input.GetAxis("Mouse X")*forceRotation;
 
            camPLayer.transform.Rotate(-camRotX, 0, 0);
 
            camRotX = Mathf.Clamp(camRotY, -90, 90);
            transform.Rotate(0, camRotY, 0);
    }
    void Update()   
    {
        float moveX = Input.GetAxis("Vertical");
        float moveY = Input.GetAxis("Horizontal");
 
        if (Input.GetKey(KeyCode.W))
        {
            transform.position += transform.forward * moveX / speed;
        }
 
        if (Input.GetKey(KeyCode.S))
        {
            transform.position += transform.forward * moveX / speed;
        }
 
        if (Input.GetKey(KeyCode.D))
        {
            transform.position += transform.right * moveY / speed;
        }
 
        if (Input.GetKey(KeyCode.A))
        {
            transform.position += transform.right * moveY / speed;
        }
 
        if (Input.GetKeyUp(KeyCode.Space))
        {
            rb.velocity = transform.up * jumpImpulse;
        }
    }
}
камеру по горизонтали вращаю вместе и игроком(капсулой) а по вертикали саму камеру поворачиваю. посчитал так более оптимально как по мне. не нужно разворачивать игрока перед движением вперед.
но не могу ограничить по оси X камеру .чтобы не переворачивалась по кругу.
но это не вся проблема.
один из порталов поставил в проходе в туннель. но камера этого портала срезает стены туннеля при повороте камеры в сторону. как это можно решить ?
Миниатюры
Проблема с управлением камерой и ее работой с порталами   Проблема с управлением камерой и ее работой с порталами  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.07.2019, 16:41
Ответы с готовыми решениями:

Проблема с камерой 2D
Мне нужно чтоб камера следила за персонажем(2d) Сделал вот такой вот скриптusing System.Collections; using System.Collections.Generic; ...

Проблема с управлением стрелками
Здравствуйте! Ребят, возникла следующая проблема: Я делаю таблицу, которую пользователь при желании может заполнять данными, ...

Какая то проблема с управлением на Rigidbody
Сделал управление персонажем через силы в Rigidbody. Вроде работает нормально, но скорость перемещения почему то изменяется от запуска к...

3
399 / 308 / 104
Регистрация: 07.05.2017
Сообщений: 2,221
04.07.2019, 16:53  [ТС]
код камер для порталов вот:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public Portal OtherPortal;
    public Camera PortalView;
 
    private void Start()
    {
        OtherPortal.PortalView.targetTexture = new RenderTexture(Screen.width, Screen.height, 24);
        GetComponentInChildren<MeshRenderer>().sharedMaterial.mainTexture = OtherPortal.PortalView.targetTexture;
    }
    void Update()
    {   //position
        Vector3 loockerPosition = OtherPortal.transform.worldToLocalMatrix.MultiplyPoint3x4(Camera.main.transform.position);
        loockerPosition = new Vector3(-loockerPosition.x, loockerPosition.y, -loockerPosition.z);
        PortalView.transform.localPosition = loockerPosition;
 
        //rotation
        Quaternion difference = transform.rotation * Quaternion.Inverse(OtherPortal.transform.rotation * Quaternion.Euler(0, 180, 0));
        PortalView.transform.rotation = difference * Camera.main.transform.rotation;
 
        //clipping
        PortalView.nearClipPlane = loockerPosition.magnitude;
    }
Добавлено через 7 минут
понимаю что не то ограничиваю. играничиваю Input с мыши ,но саму камеру не получается правильно ограничить. значения от 0 до 360 идут.
C#
1
 camPLayer.transform.rotation.x = Mathf.Clamp(camRotY, -90, 90);
такой вариант подчеркивает левую часть кода. уже по разному пробовал.
0
 Аватар для 1max1
3362 / 1775 / 1028
Регистрация: 26.10.2018
Сообщений: 5,204
04.07.2019, 16:54
Цитата Сообщение от Gammister Посмотреть сообщение
но не могу ограничить по оси X камеру .чтобы не переворачивалась по кругу.
C#
1
2
3
4
5
6
7
8
9
10
11
private float x;
 
//start
x = transform.eulerAngles.x;
 
//update
x += Input.GetAxis("Mouse Y") * forceRotation;
x = Mathf.Clamp(x, -89.0f, 89.0f);
var e = transform.eulerAngles;
e.x = x;
transform.eulerAngles = e;
0
399 / 308 / 104
Регистрация: 07.05.2017
Сообщений: 2,221
04.07.2019, 16:56  [ТС]
глубже внутрь коридора тоже сдвигал. похоже проблема в настройках камеры или слоев. сам не могу допереть

Добавлено через 1 минуту
спасибо большое 1max1 !
а с обрезкой камеры что можно сделать ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.07.2019, 16:56
Помогаю со студенческими работами здесь

Проблема с управлением жёсткого диска
Жёсткий диск рабочий, с ним все хорошо, проверял у друга. Но, когда запускаю компьютер и начинается загрузка Windows, жёсткий диск словно...

Проблема с работой БП
Купил новый БП ибо старый сгорел, купил на 450 Вт подключил его и запуская компьютер выявил проблему: отсутствует звуковой сигнал и монитор...

Asus. Проблема с web-камерой.
Проблема в том, что у камеры изображение повёрнуто вверх ногами. Стояла на компе 7-ка, у камеры нормальное изображение было, поставил XP, и...

Проблема с управлением перемещением объекта по экрану
Собрался писать игру с использованием Raycasting. На данном этапе, должны отрисовываться стены (красные квадраты) и персонаж (зелёный...

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. На мобильном - сканируйте QR-код. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru