目录
1 Image
创建Image,如图所示
1.EventSystem 监听键盘的输入和鼠标的点击事件(屏幕触摸事件)
2.没有相机,也可以看到,自带的渲染机制
3.Canvas上的组件调整Render Mode
-Overlay UI永远显示到屏幕的最前方
-Camera 可以指定一个用来渲染的相机,可以渲染其他的物体到UI的前方。创建camera并设置
1 Clear Flags:Solid color
2Culling Mask: UI
3Projection:Orthographic
4.拖到画布Canvas的Render camera里面
5.调节Near Far : -10 10
3.WordSpace
4.Image:对应sprite
5.Raw Image:对应Texture,省内存
6.Text:对应label
Constant Pixel Size: 像素大小始终不变,多用于PC端,因为分辨率差异 不大
Scale width Screen Size: 宽高适配
Constant Physical Size: 根据物理单位来进行缩放
适配
16 :9 = 1.7 :1
16 :7 = 2.28 :1
实际分辨率大于设计分辨率,不用更改适配方案,左右留有黑边
UGUI中锚点有多种“形态”,当锚点是一个点时,表示该UI大小不变,位置会随参考点改变。当锚点是一个矩形区域时,UI的大小就会随该参考区域改变,当然非常灵活,锚点矩形的大小可以随意设置,甚至可以在某个方向长度为0。
public class UIEventlisterMake :EventTrigger {
public static UIEventlisterMake Get(GameObject go)
{
UIEventlisterMake lis = go.GetComponent<UIEventlisterMake> ();
if (lis ==null) {
lis = go.AddComponent<UIEventlisterMake> ();
}
return lis;
}
public delegate void VoidDelegate(GameObject go);
public delegate void BoolDelegate(GameObject go,bool state);
public BoolDelegate onEnter;
public BoolDelegate onExit;
public VoidDelegate onClick;
public override void OnPointerClick(PointerEventData r)
{
if (onClick != null) {
onClick (this.gameObject);
}
}
public override void OnPointerEnter(PointerEventData r)
{
if (onEnter != null)
onEnter (gameObject, true);
}
public override void OnPointerExit(PointerEventData r)
{
if (onExit != null)
onExit (gameObject, false);
}
}
2.给hgui按钮添加事件
public class ButtonText : MonoBehaviour ,IPointerClickHandler{
public void Start()
{
// Button btn = GetComponent<Button> ();
// btn.onClick.AddListener (OnClick2);
UIEventlisterMake.Get (gameObject).onClick += OnClick3;
}
public void OnClick(int num)
{
Debug.Log ("OnClick: " +num);
}
public void OnClick2()
{
Debug.Log ("OnClick: " );
}
public void OnClick3 (GameObject go)
{
Debug.Log (go.name);
}
private void OnDestroy()
{
Button btn = GetComponent<Button> ();
btn.onClick.RemoveListener (OnClick2);
}
public void OnPointerClick(PointerEventData eventData)
{
Debug.Log ("继承接口");
}
}
3 适应屏幕
public class ScreenChange : MonoBehaviour {
private float design_width= 1280;
private float design_heigtht= 720;
private float reality_width;
private float reality_heigtht;
void Awake()
{
float designScale = design_width / design_heigtht;
reality_width = Screen.width;
reality_heigtht = Screen.height;
float realityScale = reality_width / reality_heigtht;
if (designScale > realityScale) //实际分辨率小于设计分辨率,宽适配,上下留有黑边
GetComponent<CanvasScaler> ().matchWidthOrHeight = 0;
}
}
1.Canvas 画布是摆放容纳所有UI元素的区域,所有的UI元素需要在画布上组装
4 Text控件
5 Image控件
6 Button控件
7 Toggle控件
8 Droup Down控件
动态设置选项与事件监听
9 Slider控件
10 ScrollBar控件
11 InputField控件
12 ScrollRect 和 Mask遮罩
13 GridLayoutGroup 网格布局组件
12. HorizontalLayoutGroup 水平布局组件,解决不同大小(可编辑)的精灵排序问题
14.Vertical LayoutGrid 垂直布局组件,同上,都允许编辑子物体的大小
15.Anchor 和 Pivot组件
public class SkillText : MonoBehaviour {
public Button skillBtn;
public Image mask;
public Text showText;
private float timer = 3f;
private float currentTime = 0f;
void Start () {
skillBtn.onClick.AddListener(OnBtnStart);
OnBtnEnd();
}
void Update ()
{
if (mask.fillAmount<=1 && mask.fillAmount >0)
{
currentTime += Time.deltaTime;
mask.fillAmount = (timer - currentTime) / timer;
showText.text = Mathf.CeilToInt(timer - currentTime).ToString();
if (mask.fillAmount ==0)
{
OnBtnEnd();
}
}
}
void OnBtnStart()
{
skillBtn.interactable = false;
mask.fillAmount = 1;
showText.text = timer.ToString();
}
void OnBtnEnd()
{
currentTime = 0f;
skillBtn.interactable = true;
mask.fillAmount = 0;
showText.text = string.Empty;
}
}