【UGUI】侧面滑出的菜单栏,宽度自适应

发表于2018-04-08
评论0 3.2k浏览
现在的UGUI使用非常的广泛,使用UGUI可以方便快速地建立UI界面,下面要和大家介绍的是侧面滑出的菜单栏的创建以及宽度自适应设置,一起来看看吧。

首先看下项目效果

实现效果

发现实现效果并不难,利用动画(iTween)+UGUI 有一个长按的判断处理即可
附上项目和代码
using System.Collections;  
using System.Collections.Generic;  
using UnityEngine;  
using UnityEngine.UI;  
public class UICont : MonoBehaviour {  
    public RectTransform mainUI;  
    public Button showHideBtn;  
    public RepeatButton dragBtn;  
    private bool m_isShow = true;  
   // public RectTransform   
    // Use this for initialization  
    void Start () {  
        dragBtn.onPress.AddListener(DragBtn);  
        showHideBtn.onClick.AddListener(ShowHide);  
    }  
    void ShowHide() {  
        Vector3 vec3Tmp = mainUI.position;  
        if(m_isShow) {  
            vec3Tmp.x = -mainUI.sizeDelta.x;  
            iTween.MoveTo(mainUI.gameObject, vec3Tmp, 1f);  
            m_isShow = false;  
        } else {  
            vec3Tmp.x = 0;  
            iTween.MoveTo(mainUI.gameObject, vec3Tmp, 1f);  
            m_isShow = true;  
        }  
    }  
    void DragBtn() {  
        Vector2 vec2Tmp = mainUI.sizeDelta;  
        vec2Tmp.x = Mathf.Clamp(Input.mousePosition.x, 100, 500);  
        mainUI.sizeDelta = vec2Tmp;  
    }  
    // Update is called once per frame  
    //void Update () {  
    //}  
}  
/******* 
 *  
 * button长按的代理 
 * http://blog.csdn.net/lyh916/article/details/51454673 
 *  
 *  
 * */  
using UnityEngine;  
using System.Collections;  
using UnityEngine.EventSystems;  
using UnityEngine.Events;  
public class RepeatButton : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IPointerExitHandler {  
    public bool invokeOnce = false;//是否只调用一次  
    private bool hadInvoke = false;//是否已经调用过  
    public float interval = 0.1f;//按下后超过这个时间则认定为"长按"  
    private bool isPointerDown = false;  
    private float recordTime;  
    public UnityEvent onDown = new UnityEvent();//按下时调用  
    public UnityEvent onPress = new UnityEvent();//按住时调用  
    public UnityEvent onRelease = new UnityEvent();//松开时调用  
    void Start() {  
    }  
    void Update() {  
        if (invokeOnce && hadInvoke)  
            return;  
        if (isPointerDown) {  
            if ((Time.time - recordTime) > interval) {  
                onPress.Invoke();  
                hadInvoke = true;  
            }  
        }  
    }  
    public void OnPointerDown(PointerEventData eventData) {  
        isPointerDown = true;  
        recordTime = Time.time;  
        onDown.Invoke();  
    }  
    public void OnPointerUp(PointerEventData eventData) {  
        isPointerDown = false;  
        hadInvoke = false;  
        onRelease.Invoke();  
    }  
    public void OnPointerExit(PointerEventData eventData) {  
        //isPointerDown = false;  
        //hadInvoke = false;  
        //onRelease.Invoke();  
    }  
}  

最后附上demo:http://download.csdn.net/download/ldy597321444/10249594
来自:https://blog.csdn.net/ldy597321444/article/details/79311014

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引