fix:1、放大缩小优化
This commit is contained in:
Binary file not shown.
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 17 KiB |
Binary file not shown.
@@ -36,12 +36,19 @@ namespace ChillConnect
|
||||
private readonly float outOffset = 200f;
|
||||
|
||||
// 网格边界
|
||||
private Vector2 _gridWorldCenter; // 网格世界中心点
|
||||
|
||||
private float gridLeft;
|
||||
private float gridRight;
|
||||
private readonly int gridRowNum = 10;
|
||||
private float gridTop;
|
||||
private float gridBottom;
|
||||
|
||||
// 网格行列、单个格子尺寸(你原有网格参数)
|
||||
private int _gridRow;
|
||||
private int _gridCol;
|
||||
private float _cellSize;
|
||||
|
||||
// 网格占用标记:true=该点位被占用,false=空闲
|
||||
private bool[,] _gridOccupied;
|
||||
// 记录每个箭头占用的所有网格点位(行,列)
|
||||
@@ -98,6 +105,7 @@ namespace ChillConnect
|
||||
uiInfo.isNeedOpenAnim = false;
|
||||
uiInfo.isNeedCloseAnim = false;
|
||||
uiInfo.isNeedUIMask = true;
|
||||
uiInfo.isTickUpdate = true;
|
||||
}
|
||||
|
||||
#region 生命周期
|
||||
@@ -155,11 +163,46 @@ namespace ChillConnect
|
||||
|
||||
public override void OnUpdate()
|
||||
{
|
||||
if (_levelConfig == null) return;
|
||||
foreach (var arrow in _levelConfig.arrows)
|
||||
// if (_levelConfig == null) return;
|
||||
// foreach (var arrow in _levelConfig.arrows)
|
||||
// {
|
||||
// UpdateArrowMove(arrow);
|
||||
// }
|
||||
//
|
||||
// ========= 编辑器模拟触摸(仅编辑模式生效) =========
|
||||
#if UNITY_EDITOR
|
||||
//1. 鼠标左键 = 单指拖拽
|
||||
// Debug.Log($"Input.GetMouseButtonDown======={Input.GetMouseButtonDown(0)}");
|
||||
if (Input.GetMouseButtonDown(0))
|
||||
{
|
||||
UpdateArrowMove(arrow);
|
||||
_lastTouchPos = Input.mousePosition;
|
||||
_isDraging = true;
|
||||
}
|
||||
if (Input.GetMouseButton(0) && _isDraging)
|
||||
{
|
||||
Vector2 curMousePos = Input.mousePosition;
|
||||
Vector2 offset = curMousePos - _lastTouchPos;
|
||||
MoveContainer(offset);
|
||||
_lastTouchPos = curMousePos;
|
||||
}
|
||||
if (Input.GetMouseButtonUp(0))
|
||||
{
|
||||
_isDraging = false;
|
||||
}
|
||||
|
||||
// 2. 鼠标滚轮 = 双指缩放
|
||||
// float scrollDelta = Input.GetMouseWheelDelta();
|
||||
// if (Mathf.Abs(scrollDelta) > 0)
|
||||
// {
|
||||
// float curScale = _viewContainer.scaleX;
|
||||
// curScale += scrollDelta * 0.1f;
|
||||
// curScale = Mathf.Clamp(curScale, _minScale, _maxScale);
|
||||
//
|
||||
// _viewContainer.scaleX = curScale;
|
||||
// _viewContainer.scaleY = curScale;
|
||||
// _zoomSlider.value = GetSliderValueByScale(curScale);
|
||||
// }
|
||||
#endif
|
||||
|
||||
// ========= 双指 = 缩放(优先级最高) =========
|
||||
if (Input.touchCount == 2)
|
||||
@@ -267,6 +310,7 @@ namespace ChillConnect
|
||||
ui.btn_hint.SetClick(OnClickHint);
|
||||
_fingerTipObj = com_finger.CreateInstance();
|
||||
_viewContainer.AddChild(_fingerTipObj);
|
||||
_fingerTipObj.visible = false;
|
||||
_currentTipArrow = null;
|
||||
|
||||
_zoomSlider = ui.zoomSlide;
|
||||
@@ -466,6 +510,43 @@ namespace ChillConnect
|
||||
_viewContainer.AddChild(dot);
|
||||
}
|
||||
}
|
||||
|
||||
// ========= 新增:网格绘制完成后,设置居中缩放轴心 =========
|
||||
CalculateGridCenter(cfg);
|
||||
SetViewPivotToGridCenter();
|
||||
}
|
||||
|
||||
/// <summary>计算网格整体世界中心(原有网格坐标不变)</summary>
|
||||
/// <summary>计算整个网格圆点区域的世界中心点</summary>
|
||||
private void CalculateGridCenter(LevelConfig cfg)
|
||||
{
|
||||
int rows = cfg.gridRows;
|
||||
int cols = cfg.gridCols;
|
||||
|
||||
// 取四个角点位,算出整体中心
|
||||
Vector2 topLeft = RowColToPos(0, 0);
|
||||
Vector2 bottomRight = RowColToPos(rows - 1, cols - 1);
|
||||
|
||||
// 几何中心
|
||||
_gridWorldCenter.x = (topLeft.x + bottomRight.x) * 0.5f;
|
||||
_gridWorldCenter.y = (topLeft.y + bottomRight.y) * 0.5f;
|
||||
}
|
||||
|
||||
/// <summary>设置_viewContainer缩放轴心 = 网格中心,实现居中缩放</summary>
|
||||
private void SetViewPivotToGridCenter()
|
||||
{
|
||||
if (_viewContainer == null) return;
|
||||
|
||||
// FGUI pivot 取值范围 0~1,是容器内部相对比例
|
||||
float pivotX = _gridWorldCenter.x / _viewContainer.width;
|
||||
float pivotY = _gridWorldCenter.y / _viewContainer.height;
|
||||
|
||||
// 限制在合法区间
|
||||
pivotX = Mathf.Clamp01(pivotX);
|
||||
pivotY = Mathf.Clamp01(pivotY);
|
||||
|
||||
// 设置轴心,此后所有缩放都围绕网格中心
|
||||
_viewContainer.pivot = new Vector2(pivotX, pivotY);
|
||||
}
|
||||
#endregion
|
||||
|
||||
@@ -708,14 +789,23 @@ namespace ChillConnect
|
||||
/// <summary>根据缩放值,计算滑动条 value(0~1)</summary>
|
||||
private float GetSliderValueByScale(float scale)
|
||||
{
|
||||
float t = (scale - _minScale) / (_maxScale - _minScale);
|
||||
return Mathf.Clamp01(t);
|
||||
float validScale = Mathf.Clamp(scale, _minScale, _maxScale);
|
||||
float ratio = (validScale - _minScale) / (_maxScale - _minScale);
|
||||
float sliderVal = ratio * 100f;
|
||||
|
||||
return Mathf.Clamp(sliderVal, 0f, 100f);
|
||||
}
|
||||
|
||||
/// <summary>根据滑动条 value(0~1),计算实际缩放值</summary>
|
||||
private float GetScaleBySliderValue(float sliderValue)
|
||||
{
|
||||
float scale = _minScale + sliderValue * (_maxScale - _minScale);
|
||||
// 先把滑块值钳位在 0~100 内
|
||||
float val = Mathf.Clamp(sliderValue, 0f, 100f);
|
||||
|
||||
// 线性映射:0→0.6,100→1.5
|
||||
float ratio = val / 100f;
|
||||
float scale = _minScale + ratio * (_maxScale - _minScale);
|
||||
|
||||
return Mathf.Clamp(scale, _minScale, _maxScale);
|
||||
}
|
||||
|
||||
@@ -1326,11 +1416,13 @@ namespace ChillConnect
|
||||
return;
|
||||
}
|
||||
|
||||
// 1. 恢复默认缩放 1倍
|
||||
_viewContainer.scaleX = 1f;
|
||||
_viewContainer.scaleY = 1f;
|
||||
// 2. 滑动条回归对应位置
|
||||
_zoomSlider.value = GetSliderValueByScale(1f);
|
||||
// 1. 恢复默认缩放 1.0
|
||||
float defaultScale = 1f;
|
||||
_viewContainer.scaleX = defaultScale;
|
||||
_viewContainer.scaleY = defaultScale;
|
||||
|
||||
// 2. 设置滑块对应位置
|
||||
_zoomSlider.value = GetSliderValueByScale(defaultScale);
|
||||
// 3. 容器屏幕居中
|
||||
float startX = (Screen.width - _viewContainer.width) * 0.5f;
|
||||
float startY = (Screen.height - _viewContainer.height) * 0.5f;
|
||||
|
||||
Reference in New Issue
Block a user