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

23 篇文章 0 订阅

首先看下项目效果

实现效果


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

  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值