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

首先看下项目效果

实现效果

发现实现效果并不难,利用动画(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

效果地址:http://www.manew.com/thread-113570-1-1.html

---------------------
作者:Unity_阿黄
来源:CSDN
原文:https://blog.csdn.net/ldy597321444/article/details/79311014

猜你喜欢

转载自www.cnblogs.com/cnwuchao/p/10603362.html