Zefirot
@Zefirot

Как сделать движение камеры мышкой пальцем+увеличение?

Недавно я сделал все это и работало оно идеально, до того пока не подключил меш, дело в том у меня был объект 50x50 2D box Collider и я его как хотел так и вертел, на нем все объекты собственно и находились, приближал/отдалял, двигал и мышкой и пальцем...
spoiler
private void ZoomEditPanelMap(){
        #if UNITY_EDITOR
        if(Input.GetAxis("Mouse ScrollWheel") != 0){
            PossibleMove = false;
            float PrevMapScale = MapScale;
            if(Input.GetAxis("Mouse ScrollWheel") > 0) MapScale = MapScale + 0.05f; else MapScale = MapScale - 0.05f;
            if(MapScale > MapScaleMax) MapScale = MapScaleMax;
            if(MapScale < MapScaleMin) MapScale = MapScaleMin;
            if(PrevMapScale != MapScale){
                Vector3 Pos = ObjectControlBoard.transform.localPosition;
                ObjectControlBoard.transform.localPosition = new Vector3((Pos.x / PrevMapScale) * MapScale, (Pos.y / PrevMapScale) * MapScale, 1f);
                ObjectControlBoard.transform.localScale = new Vector3(MapScale, MapScale, 1f);
                }
            }else PossibleMove = true;
        #else
        if(Input.touchCount == 2){
            PossibleMove = false;
            Touch touchZero = Input.GetTouch(0);
            Touch touchOne = Input.GetTouch(1);
            Vector2 touchZeroPrevPos = touchZero.position - touchZero.deltaPosition;
            Vector2 touchOnePrevPos = touchOne.position - touchOne.deltaPosition;
            float prevTouchDeltaMag = (touchZeroPrevPos - touchOnePrevPos).magnitude;
            float touchDeltaMag = (touchZero.position - touchOne.position).magnitude;
            float deltaMagnitudeDiff = (prevTouchDeltaMag - touchDeltaMag) / 500;
            float PrevMapZoom = MapZoomTouch.x;
            if(MapZoomTouch.x <= MapScaleMin & deltaMagnitudeDiff > 0) deltaMagnitudeDiff = 0;
            if(MapZoomTouch.x >= MapScaleMax & deltaMagnitudeDiff < 0) deltaMagnitudeDiff = 0;
            MapZoomTouch = new Vector3(MapZoomTouch.x -= deltaMagnitudeDiff, MapZoomTouch.y -= deltaMagnitudeDiff, 1);
            if(MapZoomTouch.x > MapScaleMax) MapZoomTouch.x = MapScaleMax;
            if(MapZoomTouch.x < MapScaleMin) MapZoomTouch.x = MapScaleMin;
            if(MapZoomTouch.y > MapScaleMax) MapZoomTouch.y = MapScaleMax;
            if(MapZoomTouch.y < MapScaleMin) MapZoomTouch.y = MapScaleMin;
            MapZoomTouch.x = MapZoomTouch.y;
            MapScale = MapZoomTouch.x;
            if(PrevMapZoom != MapZoomTouch.x){
                Vector3 Pos = ObjectControlBoard.transform.localPosition;
                ObjectControlBoard.transform.localPosition = new Vector3((Pos.x / PrevMapZoom) * MapZoomTouch.x, (Pos.y / PrevMapZoom) * MapZoomTouch.x, 1f);
                ObjectControlBoard.transform.localScale = MapZoomTouch;
                }
            }else PossibleMove = true;
        #endif
        }
    public void OnDrag(PointerEventData eventData){
        if(PossibleMove){ ObjectControlBoard.transform.Translate(eventData.delta / (Screen.height / 10)); }
        }

Работало и на компе и на телефоне отлично все....

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

Вывод собственно очевиден - нужно саму камеру двигать и приближать/отдалять...
Подскажите готовые решения данной задачи, думаю их валом, но вот пока что копаюсь и не могу нормального найти...
  • Вопрос задан
  • 798 просмотров
Решения вопроса 1
ReyGrau
@ReyGrau
Junior Unity Developer
Ищется за пару секунд Посмотри
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы