赞
踩
业务逻辑:在某个方形区域内进行滑动UI物体。
在区域的左下角和右上角分别放置两个空物体,作为范围识别。
PC端通过鼠标的位置,Android端通过手指的位置,加上上述的两个物体位置,进行范围判定。在区域内,则进行滑动UI物体(或其他逻辑)。
20201213[最后补充]
1.同类多个子级面板滑动时,可以定点比对,进行逻辑处理。比如,垂直滑动时,对item的topY和bottomY值与顶点的Y值比对,可以得到超出/超出一部分/未超出三种情况,再进行业务的处理即可。
2.可由上述的方形区域扩展为:1)平面->圆形/非规则2D物体;2)立体->球形/非规则3D物体。
//不同平台处理 if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer) { Vector2 pos = Input.mousePosition; if (IsInCheckArea(pos, leftDownTrans, rightUpTrans)) { sliderPanelSpeed = 300f; //鼠标滚动 if (Input.GetAxis("Mouse ScrollWheel") < 0)//内滑,往下滚,Y+ { SliderToDown(scenarioItems); } else if (Input.GetAxis("Mouse ScrollWheel") > 0)//外滑,往上翻,Y- { SliderToUp(scenarioItems); } //鼠标拖动 if (Input.GetMouseButton(0) || Input.GetMouseButton(1)) { sliderPanelSpeed = 50f; if (Input.GetAxis("Mouse Y") > 0)//向上滑 { SliderToUp(scenarioItems); } else if (Input.GetAxis("Mouse Y") < 0)//向下滑 { SliderToDown(scenarioItems); } } } } else if (Application.platform == RuntimePlatform.Android || Application.platform == RuntimePlatform.IPhonePlayer) { if (Input.touchCount > 0) { sliderPanelSpeed = 100f; Vector2 touchPos = Input.touches[0].position; if (IsInCheckArea(touchPos, leftDownTrans, rightUpTrans)) { if (Input.touches[0].phase == TouchPhase.Moved) { Vector2 pos = Input.touches[0].deltaPosition; if(pos.y > 0) { SliderToUp(scenarioItems); } else if(pos.y < 0) { SliderToDown(scenarioItems); } } } } } //判断是否在区域范围内 bool IsInCheckArea(Vector2 _point, Transform _leftDownTrans, Transform _rightUpTrans) { bool isIn = false; _point = Camera.main.WorldToScreenPoint(_point); Vector2 _leftDownPoint = Camera.main.WorldToScreenPoint(_leftDownTrans.position); Vector2 _rightUpPoint = Camera.main.WorldToScreenPoint(_rightUpTrans.position); if (_point.x >= _leftDownPoint.x && _point.x <= _rightUpPoint.x && _point.y >= _leftDownPoint.y && _point.y <= _rightUpPoint.y) { isIn = true; } return isIn; }
ps:要把鼠标位置或手指位置,和两个空物体的位置转换到一个坐标系下,再进行范围比较。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。