Недавно я сделал все это и работало оно идеально, до того пока не подключил меш, дело в том у меня был объект 50x50 2D box Collider и я его как хотел так и вертел, на нем все объекты собственно и находились, приближал/отдалял, двигал и мышкой и пальцем...
spoilerprivate 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)); }
}
Работало и на компе и на телефоне отлично все....
Но когда я начал работу с мешами то при движении данного объекта я заметил что маска меша ездит, таргеты меша смещается и т.д. , в общем нужно менять риторику....
Вывод собственно очевиден - нужно саму камеру двигать и приближать/отдалять...
Подскажите готовые решения данной задачи, думаю их валом, но вот пока что копаюсь и не могу нормального найти...