using System.Collections; using System.Collections.Generic; using UnityEngine; using LineUI; using UnityEngine.UI; public class LinePosition { public int index; public List pos; } public class InfraredScreenPositioningView : JCUnityLib.ViewBase { [SerializeField] RectTransform pos1; [SerializeField] RectTransform pos2; [SerializeField] RectTransform pos3; [SerializeField] RectTransform pos4; //画线时候的点偏移量 [SerializeField] int offset = 20; [SerializeField] Line line; List oldLinePosition; Vector3 beginPos; Vector3 endPos; //相机感光部分 public Slider slider; void Start() { //记录操作的位置信息 oldLinePosition = new List(); SetLinePos(); //相机感光度 slider.onValueChanged.AddListener((value)=> { onSliderEvent(value); }); onSetSliderValue(); } public void OnClick_Back() { AudioMgr.ins.PlayBtn(); ViewMgr.Instance.DestroyView(); } #region 绘制线段部分 //点击拖拽的开始位置 public void onBeginPos(int index, Vector3 pos) { beginPos = pos; } public void onDragPos(int index, Vector3 pos) { //设置线段的点 SetRectanglePoints(linePosConversion(pos1.localPosition, pos2.localPosition, pos3.localPosition, pos4.localPosition)); } //点击拖拽的结束位置 public void onEndPos(int index, Vector3 pos) { endPos = pos; if (beginPos == endPos) return; //Debug.Log(index+",最后的点:" + pos); //再记录一次最后的点 SetLinePos(); } //同步设置图片对应的位置到line public void SetLinePos() { //记录一个操作点的操作位置 AddOldLinePosition(); //设置线段的点 SetRectanglePoints(linePosConversion(pos1.localPosition, pos2.localPosition, pos3.localPosition, pos4.localPosition)); } void AddOldLinePosition() { //记录一个操作点的操作位置 List screenPositions = new List(); screenPositions.Add(pos1.localPosition); screenPositions.Add(pos2.localPosition); screenPositions.Add(pos3.localPosition); screenPositions.Add(pos4.localPosition); LinePosition linePosition = new LinePosition(); linePosition.index = oldLinePosition.Count; linePosition.pos = screenPositions; oldLinePosition.Add(linePosition); } List linePosConversion(Vector3 _pos1, Vector3 _pos2, Vector3 _pos3, Vector3 _pos4) { List _screenPositions = new List(); Vector2 startPos1 = new Vector2(_pos1.x - pos1.rect.width * 0.25f - offset, _pos1.y - pos1.rect.height * 0.25f - offset); Vector2 startPos2 = new Vector2(_pos2.x + pos2.rect.width * 0.25f + offset, _pos2.y - pos2.rect.height * 0.25f - offset); Vector2 startPos3 = new Vector2(_pos3.x + pos3.rect.width * 0.25f + offset, _pos3.y + pos3.rect.height * 0.25f + offset); Vector2 startPos4 = new Vector2(_pos4.x - pos4.rect.width * 0.25f - offset, _pos4.y + pos4.rect.height * 0.25f + offset); _screenPositions.Add(startPos1); _screenPositions.Add(startPos2); _screenPositions.Add(startPos3); _screenPositions.Add(startPos4); return _screenPositions; } void SetRectanglePoints(List screenPositions) { line.SetLine(screenPositions); } //撤回上一个元素 public void onRecall() { // 获取并删除最后一个元素,并且保留一个元素 if (oldLinePosition.Count > 1) // 确保列表不为空 { // 获取回退的那个元素点 LinePosition lastElement_second = oldLinePosition[oldLinePosition.Count - 2]; // 获取最后一个元素 LinePosition lastElement = oldLinePosition[oldLinePosition.Count - 1]; //Debug.Log(JsonUtility.ToJson(lastElement) + " = " + oldLinePosition.Count); oldLinePosition.RemoveAt(oldLinePosition.Count - 1); // 删除最后一个元素 pos1.localPosition = lastElement_second.pos[0]; pos2.localPosition = lastElement_second.pos[1]; pos3.localPosition = lastElement_second.pos[2]; pos4.localPosition = lastElement_second.pos[3]; //设置线段的点 SetRectanglePoints(linePosConversion(lastElement_second.pos[0], lastElement_second.pos[1], lastElement_second.pos[2], lastElement_second.pos[3])); } } //确认修改 public void onConfirmation() { if (oldLinePosition.Count > 1) // 确保列表不为空 { LinePosition lastElement = oldLinePosition[oldLinePosition.Count - 1]; oldLinePosition.Clear(); oldLinePosition.Add(lastElement); } } //设置位置 public void onReset() { oldLinePosition.Clear(); int _x = 120, _y = 77; pos1.anchoredPosition = new Vector3(_x, _y, 0); pos2.anchoredPosition = new Vector3(-_x, _y, 0); pos3.anchoredPosition = new Vector3(-_x, -_y, 0); pos4.anchoredPosition = new Vector3(_x, -_y, 0); //设置一次位置 SetLinePos(); } #endregion #region 相机感光度 public void onSetSliderValue() { slider.value = 5; } public void onSliderEvent(float value) { Debug.Log(value); } #endregion }