简单实现,正式用时继续优化,现仅支持左右切换按钮点击,后续增加单元格面板点击切换,左右滑动切换···

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class UIChapterPanel : UIPanelBase
{private UIChapterItem[] chapterItemArray;private Button enterBattleBtn;private Button lastChapterBtn;private Button nextChapterBtn;private int finalChapter;private int unlockChapter;private int selectChapter;private void Awake(){InitData();InitObj();}public override void Show(params object[] args){base.Show(args);if (chapterItemArray != null && chapterItemArray.Length >= 4){chapterItemArray[0].Init(selectChapter, UIChapterItem.UIChapterItemPos.Left);chapterItemArray[1].Init(selectChapter, UIChapterItem.UIChapterItemPos.Middle);chapterItemArray[2].Init(selectChapter, UIChapterItem.UIChapterItemPos.Right);chapterItemArray[3].Init(selectChapter, UIChapterItem.UIChapterItemPos.Hide);}}private void InitData(){finalChapter = 10;unlockChapter = 5;selectChapter = unlockChapter;}private void InitObj(){var objDic = UIUtility.GetAllTransformByName(transform);Transform chapterListRoot;objDic.TryGetValue("ChapterListRoot", out chapterListRoot);if (chapterListRoot != null && chapterListRoot.childCount > 0){chapterItemArray = chapterListRoot.GetComponentsInChildren<UIChapterItem>();}if (chapterItemArray == null || chapterItemArray.Length != 4)Debug.LogError("chapterItemArray == null || chapterItemArray.Length != 4");lastChapterBtn = UIUtility.TryGetComponentFromAllByName<Button>("LastChapterButton", objDic);nextChapterBtn = UIUtility.TryGetComponentFromAllByName<Button>("NextChapterButton", objDic);enterBattleBtn = UIUtility.TryGetComponentFromAllByName<Button>("EnterBattleButton", objDic);if (lastChapterBtn != null)lastChapterBtn.onClick.AddListener(() => OnSelectChapterItem(-1));if (nextChapterBtn != null)nextChapterBtn.onClick.AddListener(() => OnSelectChapterItem(1));if (enterBattleBtn != null)enterBattleBtn.onClick.AddListener(OnEnterBattleBtnClick);}public void OnSelectChapterItem(int moveDir){if (moveDir > 0){if (selectChapter < finalChapter)selectChapter++;else{selectChapter = finalChapter;return;}}else if (moveDir < 0){if (selectChapter > 0)selectChapter--;else{selectChapter = 0;return;}}elsereturn;if (chapterItemArray != null && chapterItemArray.Length > 0){for (int i = 0; i < chapterItemArray.Length; i++){chapterItemArray[i].Refresh(selectChapter, moveDir);}}}private void OnEnterBattleBtnClick(){if (selectChapter >= 0 && selectChapter <= finalChapter){if (selectChapter <= unlockChapter){Debug.Log("进入章节关卡:" + selectChapter);}else{Debug.Log("选择章节未解锁:" + selectChapter);}}elseDebug.LogError("选择章节错误:" + selectChapter);}}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;public class UIChapterItem : MonoBehaviour
{public enum UIChapterItemPos{Hide = 0,Left = 1,Middle = 2,Right = 3,}public UIChapterItemPos curItemPos { get; private set; }public int curItemChapter { get; private set; }private RectTransform rectTrans;private Vector2 initSizeDelta;private Text chapterText;private Image chapterImage;[SerializeField] private float scaleSizeRatio = 0.75f;[SerializeField] private float hideSizeRatio = 0.5f;[SerializeField] private float itemOffsetRatio = 0.5f;[SerializeField] private float movePosTime = 0.5f;[SerializeField] private float scaleSizeTime = 0.5f;private float itemOffsetPosX;private void Awake(){rectTrans = GetComponent<RectTransform>();initSizeDelta = rectTrans.sizeDelta;itemOffsetPosX = initSizeDelta.x * itemOffsetRatio;chapterText = GetComponentInChildren<Text>();chapterImage = GetComponent<Image>();}public void Init(int targetChapter, UIChapterItemPos initItemPos){curItemPos = initItemPos;switch (curItemPos){case UIChapterItemPos.Hide:rectTrans.anchoredPosition = Vector2.zero;rectTrans.sizeDelta = initSizeDelta * hideSizeRatio;transform.SetAsFirstSibling();curItemChapter = -1;break;case UIChapterItemPos.Middle:rectTrans.anchoredPosition = Vector2.zero;rectTrans.sizeDelta = initSizeDelta;transform.SetAsLastSibling();curItemChapter = targetChapter;break;case UIChapterItemPos.Right:rectTrans.anchoredPosition = new Vector2(itemOffsetPosX, 0);rectTrans.sizeDelta = initSizeDelta * scaleSizeRatio;curItemChapter = targetChapter + 1;break;case UIChapterItemPos.Left:rectTrans.anchoredPosition = new Vector2(-itemOffsetPosX, 0);rectTrans.sizeDelta = initSizeDelta * scaleSizeRatio;curItemChapter = targetChapter - 1;break;default:break;}if (chapterText != null)chapterText.text = curItemChapter.ToString();if (chapterImage != null){}}public void Refresh(int targetChapter, int moveDir){if (moveDir == 0)return;rectTrans.DOKill();switch (curItemPos){case UIChapterItemPos.Hide:curItemPos = moveDir < 0 ? UIChapterItemPos.Left : UIChapterItemPos.Right;break;case UIChapterItemPos.Left:curItemPos = moveDir < 0 ? UIChapterItemPos.Middle : UIChapterItemPos.Hide;break;case UIChapterItemPos.Middle:curItemPos = moveDir < 0 ? UIChapterItemPos.Right : UIChapterItemPos.Left;break;case UIChapterItemPos.Right:curItemPos = moveDir < 0 ? UIChapterItemPos.Hide : UIChapterItemPos.Middle;break;default:break;}Vector2 targetPos, targetSize;switch (curItemPos){case UIChapterItemPos.Hide:targetPos = Vector2.zero;targetSize = initSizeDelta * hideSizeRatio;transform.SetAsFirstSibling();curItemChapter = -1;break;case UIChapterItemPos.Middle:targetPos = Vector2.zero;targetSize = initSizeDelta;transform.SetAsLastSibling();curItemChapter = targetChapter;break;case UIChapterItemPos.Right:targetPos = new Vector2(itemOffsetPosX, 0);targetSize = initSizeDelta * scaleSizeRatio;curItemChapter = targetChapter + 1;break;case UIChapterItemPos.Left:targetPos = new Vector2(-itemOffsetPosX, 0);targetSize = initSizeDelta * scaleSizeRatio;curItemChapter = targetChapter - 1;break;default:targetPos = Vector2.zero;targetSize = Vector2.zero;curItemChapter = targetChapter;break;}//rectTrans.anchoredPosition = targetPos;//rectTrans.sizeDelta = targetSize;rectTrans.DOAnchorPosX(targetPos.x, movePosTime);rectTrans.DOSizeDelta(targetSize, scaleSizeTime);if (chapterText != null)chapterText.text = curItemChapter.ToString();if (chapterImage != null){}}}

【Unity】滚动缩放关卡选择列表相关推荐

  1. Unity游戏开发文档(3.1.3):滚动式关卡选择菜单

    前言      该文档为<Unity游戏开发文档(3):Dancing Line>的附属文档,亦可看作是单独的技术总结文档. 目录 综述 构建滚动菜单 读取关卡信息 填充菜单选项 选项自动 ...

  2. Unity鼠标中键滚动缩放相机,左键点击场景中模型居中显示

    using UnityEngine; using System.Collections;public class MoustControl : MonoBehaviour {//鼠标右键可以拖拽旋转场 ...

  3. 【玩转cocos2d-x之十五】关卡选择的设计

    原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/12966993 这节介绍一下游戏中帮助界面和关卡选择的设计,其实都是一样的,关 ...

  4. 思达报表工具Style Report基础教程—用选择列表,选择树进行数据过滤

    2019独角兽企业重金招聘Python工程师标准>>> 教程视频:http://v.youku.com/v_show/id_XOTIyMTA1NDU2.html 当一个报表包含大量的 ...

  5. ArcPro如何缩放至选择要素(Arcpy)

    ArcGIS中利用Arcpy进行缩放至选择要素可以使用下面的代码: # encoding: utf-8 #获取地图文档中的图层列表 #mxd可引用网络驱动器上的文档 import arcpy from ...

  6. unity如何解锁关卡

    下图是一个游戏的关卡界面,在设计关卡时,当前面一关通关后使后一关的关卡解锁该如何设计呢,本章内容将一解锁六个关卡为例 一.理论知识 1.在unity中,如何实现某些按钮可以互动,而其他按钮无法互动呢, ...

  7. 微信小程序手把手教你实现带字母索引的城市选择列表

    微信小程序手把手教你实现带字母索引的城市选择列表 前言 需求分析 左边可滑动列表 滑动列表UI实现 item点击事件 右边带字母的索引条 索引条从上到下分别是定位和26个大写字母 索引条响应触摸和点击 ...

  8. php mysql多重筛选,如何使用php、html、mysql构建一个多重分类选择列表

    不适用javascript,完全通过php实现多级列表选择,列表数据从数据库获取 A very simple way to build and do a hierarchical html categ ...

  9. WSHPSRS-匹克选择列表生成器-SRS(R12.2.3)

     匹克选择列表生成器-SRS(R12.2.3) --US Program:Pick Selection List Generation - SRS Short Name:WSHPSRS Appli ...

最新文章

  1. 6月20日截止,请勿错过热心肠奖学金!
  2. 鸿蒙 github harmony,鸿蒙HarmonyOS三方件开发指南-SwipeLayout侧滑删除
  3. 美团2020年全年财务报告:疫情期间网络营销之下的美团选择进军社区团购
  4. 老王亲述:我的运维心路历程
  5. spring18-3: 工厂bean代理-半自动
  6. java.util.List学习笔记
  7. Acwing第 35 场周赛【完结】
  8. 16、Windows API 服务
  9. php table 下拉框,LayerUI的table 里面加 select 下拉框 – Fly社区-Mikel
  10. c语言怎么判别输入字母大小,使用C语言判断英文字符大小写的方法
  11. 选股方法-陶博士-月线反方法的思路来源
  12. php curl修改ip,php中curl设置ip的方法
  13. python查看微信撤回消息_python实现文件助手中查看微信撤回消息
  14. 全DIY主题+小工具 正版Win7桌面新体验windows7旗舰版主
  15. excel两列数据对比找不同_比Vlookup好用10倍,它才是Excel函数中的No.1
  16. wireshark抓web包
  17. 《The Tobii I-VT Fixation Filter Algorithm description》阅读
  18. TVB西游记2观音的眼泪化作金河送唐僧回长安
  19. “黑盒”下的攻击实现,真实世界的“人脸识别”遭遇危险!
  20. R语言 图片识别文字 PNG JPG图片转文字 OCR tesseract包

热门文章

  1. android 历史版本介绍(android4.4-android9,持续更新)
  2. lwIP中的snmp
  3. Android:控件GridView的使用
  4. 中国企业数字化转型案例征集进行中
  5. QT触摸屏上TouchEvent 和 MouseEvent触发的顺序
  6. 2-1 李宏毅2021春季机器学习教程-第二节机器学习任务攻略
  7. arguments的用法
  8. font:综合设置字体样式 (重点)
  9. AES破解实践1:某江
  10. 报错:‘xxxx‘ is declared but its value is never read.Vetur(6133)