昨天问题
InputField光标被遮挡问题:背景图片输入层级高于光标的层级,把光标弄成子物体,子物体层级高

自制的滑动框,选项怎么对齐,把Template的Pivot.y改为1

分辨率的区别:16:9和1920x1080
16:9,屏幕像素按比例缩放,文本会变模糊
1920x1080,屏幕像素是固定的

Canvas Group:控制一组UI的某些属性(所有子物体的UI组件的属性)
Alpha:改变所有子物体的透明通道,0不显示,1显示
Interactable:改变所有子物体的交互状态,可交互,不可交互
Blocks Raycasts:改变所有子物体的射线检测,接受射线检测,不接受射线检测
Ignore Parent Group:是否忽略父物体的Canvas Group的影响

登录界面的淡入淡出效果

Panel组件(少用)
作用:背景图或父物体
 
ScrollView组件(拖动框)
Content:可拖动的物体,改变image的父物体Content的坐标
Horizontal、Vertical:是否可以水平、垂直拖动
Movement Type:移动类型
----Elastic:回弹原位,会自动回到对齐的位置
--------Elasticity回弹系数,值越大回弹越慢
----Unrestricted:自由拖动,无限制,拖到哪就是哪
----Clamped:有限制的,拖动物体的拖动框最多能跟视窗对齐,父物体边缘限制在视窗边缘
Inertia:惯性
----Deceleration Rate:惯性的衰减系数,0相当于没有惯性,1
Scroll Sensitivity:鼠标滚轮的滚动系数
Viewport:视窗,如果未指定,则视窗默认为ScrollRect的范围
Horizontal ScrollBar:水平滚动条
----Visibility:显示方式
--------Permanent:永久显示
--------Auto Hide:自动隐藏
--------Auto Hide And Expand Viewport:自动隐藏并且扩展视窗
Vertical ScrollBar:垂直滚动条

Mask遮罩:图片圆形显示
遮罩依赖于Image图片形状,必须与Image一起使用,否则无效
Show Mask Graphic:是否显示遮罩的图片

Viewport里的遮罩

自制拖动框

综合练习-拖动框

Hrizontal Layout Group:水平自动布局组件(对自己的子物体)
Padding:距离四个边缘的间距,距离四个变量的距离
Spacing:各个元素之间的间距
Child Alignment:子物体的对齐方式
Child Control Size:
----Width:是否强行扩大子物体的宽度,来填补额外的可用空间
----Height:是否强行扩大子物体的高度,来填补额外的可用空间
----勾选后,子物体的宽高会变成不可编辑
Child Force Expand:是否强行扩大物体间的横向间隔,来填补额外的可用空间

Movement Type - Clamped:
需要在Content的长度比Viewport大的情况下才可以拖动
可以使用自动扩容组件,给Content动态添加长度

Content Size Fitter(自动扩容组件)
Horizontal Fit:水平自动扩容
----Unconstralned:不需要自动扩容
----Min Size:最小值
----Preferred Size:最合适的值(常用)
一般情况下,需要和自动布局组件或Text组件一起使用
自动扩容后,宽高变为不可修改

名称显示

代码操作

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. public class SelectUI : MonoBehaviour {
  6. public Text nameText;
  7. public string playerName;
  8. private Toggle toggle;
  9. // Use this for initialization
  10. void Start () {
  11. toggle = GetComponent<Toggle>();
  12. toggle.onValueChanged.AddListener(OnValueChanged);
  13. }
  14.  
  15. // Update is called once per frame
  16. void Update () {
  17.  
  18. }
  19. void OnValueChanged(bool isOn)
  20. {
  21. Debug.Log("OnValueChanged");
  22. nameText.text = isOn ? playerName : "";
  23. }
  24. }
UGUI事件接口
命名空间:using UnityEngine.EventSystems;
继承了UGUI事件接口的类,挂载物体上,只要子物体或自己本身能接受射线检测,接口就是可以执行的。
接口简介:指针点击接口
IPointerClickHandler:当鼠标指针点击,执行接口里的方法(在图片内点击,在图片内抬起)
IPointerDownHandler:当鼠标指针按下
IPointerUpHandler:当鼠标指针抬起,执行接口里的方法(在图片内点击,在图片内外抬起)
IPointerEnterHandler:当鼠标指针进入
IPointerExitHandler:当鼠标指针离开
右键点击按钮

代码操作

  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. using UnityEngine.Events;
  6. using UnityEngine.EventSystems;
  7. using UnityEngine.UI;
  8. public class RightButton : MonoBehaviour,
  9. IPointerEnterHandler,
  10. IPointerExitHandler,
  11. IPointerDownHandler,
  12. IPointerUpHandler,
  13. IPointerClickHandler
  14. {
  15. public Graphic graphic;//改变颜色的图像
  16. public Color normalColor = Color.white;
  17. public Color enterColor = Color.white;//当鼠标进入时按钮的颜色
  18. public Color pressColor = Color.white;//当鼠标按下时按钮的颜色
  19. //onClick存储所有的在点击的时候执行的方法
  20. public RightButtonEvent onClick = new RightButtonEvent();
  21. private bool isExit = true;//鼠标是否离开图片区域
  22. private void Awake()
  23. {
  24. if (graphic == null)
  25. {
  26. graphic = GetComponent<Graphic>();
  27. }
  28. }
  29. public void OnPointerEnter(PointerEventData eventData)
  30. {
  31. //当鼠标进入时改变颜色
  32. graphic.color = enterColor;
  33. isExit = false;
  34. }
  35. public void OnPointerExit(PointerEventData eventData)
  36. {
  37. graphic.color = normalColor;
  38. isExit = true;
  39. }
  40. public void OnPointerDown(PointerEventData eventData)
  41. {
  42. //只有按下鼠标右键才有效果
  43. if (eventData.button == PointerEventData.InputButton.Right)
  44. {
  45. graphic.color = pressColor;
  46. }
  47. }
  48. public void OnPointerUp(PointerEventData eventData)
  49. {
  50. if (eventData.button == PointerEventData.InputButton.Right)
  51. {
  52. //判断鼠标是否在图片内部
  53. if (isExit)
  54. {
  55. graphic.color = normalColor;
  56. }
  57. else
  58. {
  59. graphic.color = enterColor;
  60. }
  61. }
  62. }
  63. public void OnPointerClick(PointerEventData eventData)
  64. {
  65. if (eventData.button == PointerEventData.InputButton.Right)
  66. {
  67. onClick.Invoke();
  68. }
  69. }
  70. [System.Serializable]//这个类是可序列化的
  71. public class RightButtonEvent : UnityEvent
  72. {
  73. }
  74. }
隐式实现
显示实现,两个接口有同名方法时使用

默认不区分鼠标左键右键和中键,可通过枚举类型,判断鼠标按键

给事件添加方法

  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. using UnityEngine.EventSystems;
  6. public class RightButtonTest : MonoBehaviour
  7. {
  8. private RightButton rightButton;
  9. // Use this for initialization
  10. void Start () {
  11. rightButton = GetComponent<RightButton>();
  12. rightButton.onClick.AddListener(Click);
  13. }
  14.  
  15. // Update is called once per frame
  16. void Update () {
  17.  
  18. }
  19. public void Click()
  20. {
  21. Debug.Log("点击了右键按钮");
  22. }
  23. }

鼠标点击,跟随移动

PointerEventData类
button:鼠标按键的枚举
position:当前鼠标在屏幕中的位置
pressPosition:按下时鼠标在屏幕中的位置
enterEventCamra:当进入时的事件相机(在overlay 模式下为null)
pressEventCamra:当按下时的事件相机(在overlay 模式下为null)
代码操作
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. using UnityEngine.Events;
  6. using UnityEngine.EventSystems;
  7. using UnityEngine.UI;
  8. public class ClickButton : MonoBehaviour, IPointerClickHandler {
  9. public GameObject image;
  10. public void OnPointerClick(PointerEventData eventData)
  11. {
  12. //转换坐标的API
  13. //转换出来的是局部坐标,localPosition
  14. //第一个参数:想要以哪个坐标系为参考(一般情况下都是父物体坐标系)
  15. //第二个参数:屏幕坐标(鼠标所在的屏幕坐标)
  16. //第三个参数:相机
  17. //第四个参数:转换成功之后的局部坐标
  18. //返回值
  19. Vector2 outPos;
  20. bool isSuccess = RectTransformUtility.ScreenPointToLocalPointInRectangle(
  21. image.transform.parent as RectTransform,
  22. eventData.position,
  23. Camera.main,//eventData.pressEventCamera,
  24. out outPos
  25. );
  26. if (isSuccess)
  27. {
  28. image.transform.localPosition = outPos;
  29. }
  30. }
  31. // Use this for initialization
  32. void Start () {
  33.  
  34. }
  35.  
  36. // Update is called once per frame
  37. void Update () {
  38.  
  39. }
  40. }

Overlay模式 ,代码可以填写null

Camera模式,可以填渲染摄像机

使用锚点坐标来移动的问题
将锚点设置在画布的左下角(0,0),通过用锚点坐标改变图片位置
但当锚点不在中心点时,屏幕分辨率变化,画布变化,锚点也会改变
小地图

添加Render Texture

画布设置

相机设置

标签设置

相机遮罩设置

角色展示
摄像机设置纯色,剔除背景

角色旋转代码逻辑

  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. using UnityEngine.EventSystems;
  6. public class LeonaRotate : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
  7. {
  8. public GameObject obj;
  9. bool isInImage = false;
  10. public void OnPointerEnter(PointerEventData eventData)
  11. {
  12. isInImage = true;
  13. }
  14. public void OnPointerExit(PointerEventData eventData)
  15. {
  16. isInImage = false;
  17. }
  18. // Update is called once per frame
  19. void Update()
  20. {
  21. if (isInImage && Input.GetMouseButton())
  22. {
  23. float offsetX = Input.GetAxis("Mouse X");
  24. obj.transform.rotation *= Quaternion.Euler(, -offsetX * 60f, );
  25. }
  26. else
  27. {
  28. obj.transform.rotation = Quaternion.Slerp(obj.transform.rotation, Quaternion.Euler(, , ), 0.1f);
  29. }
  30. }
  31. }

Unity3D学习笔记(二十二):ScrollView和事件接口的更多相关文章

  1. Unity3D学习笔记(十二):2D模式和异步资源加载

    2D模式和3D模式区别:背景纯色,摄像机2D,没有深度轴 精灵图片设置 Normal map,法线贴图,更有立体感 Sprite (2D and UI),2D精灵贴图,有两种用途 1.当做UI贴图 2 ...

  2. VSTO 学习笔记(十二)自定义公式与Ribbon

    原文:VSTO 学习笔记(十二)自定义公式与Ribbon 这几天工作中在开发一个Excel插件,包含自定义公式,根据条件从数据库中查询结果.这次我们来做一个简单的测试,达到类似的目的. 即在Excel ...

  3. 汇编入门学习笔记 (十二)—— int指令、port

    疯狂的暑假学习之  汇编入门学习笔记 (十二)--  int指令.port 參考: <汇编语言> 王爽 第13.14章 一.int指令 1. int指令引发的中断 int n指令,相当于引 ...

  4. Binder学习笔记(十二)—— binder_transaction(...)都干了什么?

    binder_open(...)都干了什么? 在回答binder_transaction(...)之前,还有一些基础设施要去探究,比如binder_open(...),binder_mmap(...) ...

  5. java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)

    java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...

  6. Android学习笔记(十二)——实战:制作一个聊天界面

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 运用简单的布局知识,我们可以来尝试制作一个聊天界面. 一.制作 Nine-Patch 图片 : Nine-Pa ...

  7. MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  8. 如鹏网学习笔记(十二)HTML5

    一.HTML5简介 HTML5是HTML语言第五次修改产生的新的HTML语言版本 改进主要包括: 增加新的HTML标签或者属性.新的CSS样式属性.新的JavaScript API等.同时删除了一些过 ...

  9. o'Reill的SVG精髓(第二版)学习笔记——第十二章

    第十二章 SVG动画 12.1动画基础 SVG的动画特性基于万维网联盟的“同步多媒体集成语言”(SMIL)规范(http://www.w3.org/TR/SMIL3). 在这个动画系统中,我们可以指定 ...

随机推荐

  1. read 命令

    read 用来接收标准输入 #!/bin/bash read -t -p "Please input a number:" number echo $number //把键盘输入的 ...

  2. CentOS工作内容(一)CentOS6.4的安装 hwclock和date

    CentOS工作内容(一)CentOS6.4的安装 hwclock和date 光碟安装 分配20G磁盘空间 插入光碟 选择第一项安装 如果要急救的话请选择第三项 启动安装进程 跳过光碟检测 选择nex ...

  3. 网站被XMR恶意挖矿

    发现: 网站首页被恶意更改 网站的关键词和描述被恶意更改 服务器和只要访问此服务器上的网页cup 直线上升100% 排查代码发现js 文件被恶意更改,访问了挖矿网站 操作:删除js 里面的恶意代码,更 ...

  4. Python线程,进程,携程,I/O同步,异步

    只有本人能看懂的-Python线程,进程,携程,I/O同步,异步 举个栗子: 我想get三个url,先用普通的for循环 import requests from multiprocessing im ...

  5. inline详解

    1. 引入inline关键字的原因 在c/c++中,为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入了inline修饰符,表示为内联函数. 栈空间就是指放置程序的局部数据(也就是 ...

  6. Lintcode: Find Peak Element

    There is an integer array which has the following features: * The numbers in adjacent positions are ...

  7. PHP查询MySQL大量数据的内存占用分析

    这篇文章主要是从原理, 手册和源码分析在PHP中查询MySQL返回大量结果时, 内存占用的问题, 同时对使用MySQL C API也有涉及. 昨天, 有同事在PHP讨论群里提到, 他做的一个项目由于M ...

  8. cordova+Android Studio 1.0+ionic+win7(转)

    转自http://blog.csdn.net/fuyunww/article/details/42216125 目录(?)[-] 在项目目录下执行 a创建工程 b添加平台支持 c添加插件在Androi ...

  9. FRM-40212: Invalid value for field %s.

    Cause:        Caused by one of the following: 1.  The value is not of the proper data type. 字段类型不对 2 ...

  10. DOS操作系统的历史

    昨日(7月27日),微软公司的DOS操作系统迎来了30岁生日. DOS是历史上一个划时代的产品,标识着PC(个人电脑)的崛起和普及,对计算机行业影响深远. 只有了解DOS的历史,才能理解今天的计算机工 ...