Проблемы с поворотом камеры пальцем

Программирование для iPhone & Android

Проблемы с поворотом камеры пальцем

Сообщение romatrild 10 дек 2018, 23:01

Короче дело такое , я только новичок! Написал скрипт на поворт камеры пальцем (swipe) вокруг грузовика. У меня есть руль которим можно поворачивать колеса , проблема в том что когда я поворачиваю руль то камера тоже поворачиваеться , как ето исправить?

Вот код!

Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class Swipe : MonoBehaviour {
        private Touch initTouch = new Touch ();
        public Camera cam;
        private float rotX = 0f;
        private float rotY = 0f;
        private Vector3 origRot;

        public float rotSpeed = 0.5f;
        public float dir = -1;



        void Start ()
        {
                origRot = cam.transform.eulerAngles;
                rotX = origRot.x;
                rotY = origRot.y;

        }
       

        void FixedUpdate ()
        {
                foreach (Touch touch in Input.touches)
                {
                        if (touch.phase == TouchPhase.Began) {
                                initTouch = touch;
                        }
                        else if (touch.phase == TouchPhase.Moved)
                        {
                                float deltaX = initTouch.position.x - touch.position.x;
                                float deltaY = initTouch.position.y - touch.position.y;
                                rotX -= deltaY * Time.deltaTime * rotSpeed * dir;
                                rotY += deltaX * Time.deltaTime * rotSpeed * dir;
                                cam.transform.eulerAngles = new Vector3 (rotX, rotY, 0f);
                                rotX = Mathf.Clamp (rotX, -45f, 45f);

                        }
                       
                        else if (touch.phase == TouchPhase.Ended)
                        {
                                initTouch = new Touch ();
                        }
                }
        }
}
 
romatrild
UNец
 
Сообщения: 2
Зарегистрирован: 10 дек 2018, 20:52

Re: Проблемы с поворотом камеры пальцем

Сообщение Kabanelloo 23 июл 2019, 23:10

Привет, добавь буливую переменную IsDragging в скрипт управления камерой. Руль ваш скорее всего UI Элемент, по этому можно обрабатывать события нажатия на руль. Вам нужно реализовать эти интерфейсы, почитайте о них в Юнити документации, я мог немного ошибиться в названиях IPointerDown, IPointerUp.

Создайте класс - новый скрипт
Синтаксис:
Используется csharp
using UnityEngine.Event // вроде такое название библиотеки которая используется для событий.
[SerializeField] // чтобы ваше событие было видно в инспекторе
public class EventBool : UnityEvent<bool>{} // Ваше кастомное событие в данный момент оно получает булевую сигнатуру

public class UIActions : MonoBehavior, IPointerDown, IPointerUp // ваш новый класс который должен реализовать интерфейсы событий нажатия на ваш UI
{
 public EventBool OnUIAction = new EventBool(); //Объявление события.

// здесь будет метод который вы реализуете из интерфейса IPointerDown в котором вы вызовите это событие при нажатии на Этот Элемент OnUIAction.Invoke(true);

// здесь будет метод который вы реализуете из интерфейса IPointerUp в котором вы вызовите это событие при поднятии мышки или пальца на Этот Элемент OnUIAction.Invoke(false);
}
 


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

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

public void BlockInput (bool IsDown)
{
  IsDragging = IsDown;
}
 


После в инспекторе объекта UI - руля в событии, выберите свою камеру, найдите в поле Function свой скрипт камеры и в нем свой метод BlockInput, убедитесь, что он выбран из поля Dynamic , чтобы в реальном времени менять значения.

Изображение
Изображение

Теперь в своем коде камеры в строке управления вы можете добавить условие

Синтаксис:
Используется csharp
if(!IsDragging)
{
  //Тут ваш код управления камерой
}
 


На вашем UI руле должна стоять галочка Raycast точно не помню как называется.

Изображение

Можно сделать и проще и миллионами других способов. Но теперь когда вы нажимайте на руль, вы можете добавить туда еще и другие объекты которые должны выполнятся в момент нажатия на него.

В общем этот класс делает лишь одно, он вызывает все классы или объекты которые подписаны на событие нажатия на элемент интерфейса и передает и true если на элемент нажали и false если убрали палец или подняли кнопку мыши. И ваш метод в камере BlockInput будет получать ваши действия и регулировать ваше управление.

Ваше управление лучше поставить в Update так как FixedUpdate лучше для физических расчетов.
Последний раз редактировалось Kabanelloo 24 июл 2019, 14:11, всего редактировалось 1 раз.
Kabanelloo
UNITрон
 
Сообщения: 163
Зарегистрирован: 03 фев 2012, 21:55
Откуда: Kaliningrad/Crimea

Re: Проблемы с поворотом камеры пальцем

Сообщение Kabanelloo 23 июл 2019, 23:45

Ну а если же ваш руль это меш, то добавьте коллайдер на меш руля и делайте рейкас в него с точки на экране, при попадании рейкаста проверяйте условие например по тегу объекта, если теги совпадают, то ставьте вашу булевую if(Physics.Raycast(тут откуда, куда, хит выход,, дистанция луча)) { IsDragging = true } есели рейкаст перестал бить так как вы подняли палец или кнопку мыши, то else { IsDragging = false;}.
Kabanelloo
UNITрон
 
Сообщения: 163
Зарегистрирован: 03 фев 2012, 21:55
Откуда: Kaliningrad/Crimea


Вернуться в iPhone & Android

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

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