UGUI

游戏菜单

  1. 开始游戏(Button
  2. 游戏设置(Button
  3. 结束游戏(Button
  4. 声音开关(Toggle
  5. 音量大小(Slider
  6. 故事简介(Image
  7. TitleImage
  8. TextListImageScrollRectMask
  9. ScrollbarImageScrollbar

按钮的点击事件、滑动条的事件

  1. Slider 改变模型的旋转速度
  2. 通过SliderOnValueChange事件改变模型物体上的脚本中的值(Dynamic float,把改变后的值传递给事件回调函数)

开始界面

  1. 开始按钮(ImageButton
  2. 音量按钮
  3. 设置按钮
  4. ...
  5. 自适应设置
  6. 物体的显示顺序

战斗界面

  1. 头像状态(头像、血条、等级)
  2. 体力进度条(SliderFilled Image
  3. 技能按钮(冷却)
  4. ...
  5. Image类型
  6. Label类型(ShadowOutline

角色面板

  1. 角色属性(头像、属性)
  2. 分栏(ToggleGroup
  3. 装备栏(Toggle
  4. 设置OnValueChanged事件,控制装备栏面板显示(GameObject.SetActive)
  5. 消耗品栏(Toggle)
  6. ...
  7. 材料栏(Toggle)
  8. ...
  9. 装备栏面板
  10. 背景(Image)
  11. 格子(GridLayoutGroup
  12. 子物体最好使用空物体套壳,避免被改变尺寸
  13. 消耗品面板
  14. ...
  15. 材料栏面板
  16. ...

关卡选择界面

  1. 背景
  2. 滚动面板
  3. ScrollRectContent设置为GridLayouGroup的物体)、添加Mask、脚本控制滚动的位置(scrollRect.horizontalNormalizedPosition
  4. GridLayoutGroup 控制所有的关卡排列
  5. Toggle组(控制滚动面板当前显示的页)
  6. 滑动列表自动设置Toggle的选项
  7. 设置Toggle的选项设置滚动面板的内容

任务列表

  1. 背景
  2. SrollRect(控制列表的滑动)
  3. VerticalLayoutGroup (控制所有子项的排列,可以设置Height为所有子项的高度和)
  4. 任务项

设置界面

  1. 声音(Slider
  2. 难度(ToggleGroup
  3. 音效(ToggleGroupOnValueChange事件触发脚本控制)
  4. 音乐(ToggleGroupOnValueChange事件触发脚本控制)

游戏登陆界面(输入框)

  1. 用户名
  2. InputField 组件
  3. Text组件(默认文本显示)
  4. Text组件(输入以后,用于文本显示)
  5. 密码
  6. ...

背包系统的物体拖拽

  1. using UnityEngine.EventSystem;
  2. public class Item : MonoBehaviour , IPointDownHandler, IPointUpHandler, IDragHandler
  3. {
  4. private Transform lastTrans; // 保存上一次格子的引用
  5. private Transform currentTrans; // 保存当前的格子
  6. private Transform dragable; // 临时的格子
  7. public void OnPointDown(PointEventData eventData)
  8. {
  9. // 保存原来格子的引用
  10. lastTrans = this.transform.parent;
  11. // 改变父物体到最后的位置
  12. this.transform.parent = dragable;
  13. // 当前物体放大些
  14. this.transform.localScale = Vector3.one * 1.2f;
  15. }
  16. public void OnPointUp(PointEventData eventData)
  17. {
  18. RaycastHit2D hit = Physics2D.Raycast(Input.mousePosition, -Vector2.up)
  19. {
  20. if(hit.collider!= null && hit.collider.tag == "Item")
  21. {
  22. hit.collider.transform.localScale = Vector3.one;
  23. if(hit.transform.childCount != 0)
  24. {
  25. // 放到新的格子下面
  26. // 改变父物体
  27. // 位置归0
  28. }
  29. else
  30. {
  31. // 放回原处
  32. // 位置归0
  33. this.transform.parent = lastTrans;
  34. this.transform.localScale = Vector3.one;
  35. this.transform.localPosition = Vector3.one;
  36. }
  37. }
  38. else // 没有放到格子上
  39. {
  40. this.transform.parent = lastTrans;
  41. this.transform.localScale = Vector3.one;
  42. this.transform.localPosition = Vector3.one;
  43. }
  44. }
  45. }
  46. public void OnDrag(PointEventData eventData)
  47. {
  48. if(dragable != null)
  49. {
  50. dragable.transform.localScale = Vector3.one;
  51. }
  52. transform.position = Input.mousePosition;
  53. RaycastHit2D hit = Physics2D.Raycast(Input.mousePosition, -Vector2.up);
  54. if(currentTrans != lastTrans)
  55. {
  56. lastTrans.localScale = Vector3.one;
  57. lastTrans = currentTrans;
  58. currentTrans = hit.transform;
  59. }
  60. // 悬停的格子变大些
  61. if(hit.transform != null && hit.transform.tag == "Item")
  62. {
  63. hit.transform.localScale = Vector3.one * 1.2f;
  64. }
  65. }
  66. void Update()
  67. {
  68. if(currentTrans != null)
  69. {
  70. currentTrans.localScale = Vector3.one * 1.2f;
  71. lastTrans.localScale = Vector3.one;
  72. }
  73. }
  74. }

?