fix:1、放大缩小优化

This commit is contained in:
barry
2026-06-14 16:25:04 +08:00
parent 9663e8a6de
commit 3391a053d3
3 changed files with 103 additions and 11 deletions
Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 17 KiB

+103 -11
View File
@@ -36,12 +36,19 @@ namespace ChillConnect
private readonly float outOffset = 200f; private readonly float outOffset = 200f;
// 网格边界 // 网格边界
private Vector2 _gridWorldCenter; // 网格世界中心点
private float gridLeft; private float gridLeft;
private float gridRight; private float gridRight;
private readonly int gridRowNum = 10; private readonly int gridRowNum = 10;
private float gridTop; private float gridTop;
private float gridBottom; private float gridBottom;
// 网格行列、单个格子尺寸(你原有网格参数)
private int _gridRow;
private int _gridCol;
private float _cellSize;
// 网格占用标记:true=该点位被占用,false=空闲 // 网格占用标记:true=该点位被占用,false=空闲
private bool[,] _gridOccupied; private bool[,] _gridOccupied;
// 记录每个箭头占用的所有网格点位(行,列) // 记录每个箭头占用的所有网格点位(行,列)
@@ -98,6 +105,7 @@ namespace ChillConnect
uiInfo.isNeedOpenAnim = false; uiInfo.isNeedOpenAnim = false;
uiInfo.isNeedCloseAnim = false; uiInfo.isNeedCloseAnim = false;
uiInfo.isNeedUIMask = true; uiInfo.isNeedUIMask = true;
uiInfo.isTickUpdate = true;
} }
#region #region
@@ -155,11 +163,46 @@ namespace ChillConnect
public override void OnUpdate() public override void OnUpdate()
{ {
if (_levelConfig == null) return; // if (_levelConfig == null) return;
foreach (var arrow in _levelConfig.arrows) // 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) if (Input.touchCount == 2)
@@ -267,6 +310,7 @@ namespace ChillConnect
ui.btn_hint.SetClick(OnClickHint); ui.btn_hint.SetClick(OnClickHint);
_fingerTipObj = com_finger.CreateInstance(); _fingerTipObj = com_finger.CreateInstance();
_viewContainer.AddChild(_fingerTipObj); _viewContainer.AddChild(_fingerTipObj);
_fingerTipObj.visible = false;
_currentTipArrow = null; _currentTipArrow = null;
_zoomSlider = ui.zoomSlide; _zoomSlider = ui.zoomSlide;
@@ -466,6 +510,43 @@ namespace ChillConnect
_viewContainer.AddChild(dot); _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 #endregion
@@ -708,14 +789,23 @@ namespace ChillConnect
/// <summary>根据缩放值,计算滑动条 value(0~1)</summary> /// <summary>根据缩放值,计算滑动条 value(0~1)</summary>
private float GetSliderValueByScale(float scale) private float GetSliderValueByScale(float scale)
{ {
float t = (scale - _minScale) / (_maxScale - _minScale); float validScale = Mathf.Clamp(scale, _minScale, _maxScale);
return Mathf.Clamp01(t); float ratio = (validScale - _minScale) / (_maxScale - _minScale);
float sliderVal = ratio * 100f;
return Mathf.Clamp(sliderVal, 0f, 100f);
} }
/// <summary>根据滑动条 value(0~1),计算实际缩放值</summary> /// <summary>根据滑动条 value(0~1),计算实际缩放值</summary>
private float GetScaleBySliderValue(float sliderValue) private float GetScaleBySliderValue(float sliderValue)
{ {
float scale = _minScale + sliderValue * (_maxScale - _minScale); // 先把滑块值钳位在 0~100 内
float val = Mathf.Clamp(sliderValue, 0f, 100f);
// 线性映射:0→0.6100→1.5
float ratio = val / 100f;
float scale = _minScale + ratio * (_maxScale - _minScale);
return Mathf.Clamp(scale, _minScale, _maxScale); return Mathf.Clamp(scale, _minScale, _maxScale);
} }
@@ -1326,11 +1416,13 @@ namespace ChillConnect
return; return;
} }
// 1. 恢复默认缩放 1 // 1. 恢复默认缩放 1.0
_viewContainer.scaleX = 1f; float defaultScale = 1f;
_viewContainer.scaleY = 1f; _viewContainer.scaleX = defaultScale;
// 2. 滑动条回归对应位置 _viewContainer.scaleY = defaultScale;
_zoomSlider.value = GetSliderValueByScale(1f);
// 2. 设置滑块对应位置
_zoomSlider.value = GetSliderValueByScale(defaultScale);
// 3. 容器屏幕居中 // 3. 容器屏幕居中
float startX = (Screen.width - _viewContainer.width) * 0.5f; float startX = (Screen.width - _viewContainer.width) * 0.5f;
float startY = (Screen.height - _viewContainer.height) * 0.5f; float startY = (Screen.height - _viewContainer.height) * 0.5f;