一个侧边栏自动隐藏小组件。留作备用。
using DG.Tweening;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public enum Direction
{
up,
down,
left,
right
}
///
/// 边缘自动隐藏组件
///
public class AutoHideItem : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{
//[Header ("检测鼠标的物体")]
//public RectTransform selfObj;
[Header ("需要显隐的物体")]
public RectTransform moveObj;
[Tooltip ("隐藏方向")]
public Direction dir = Direction.right;
[Header ("动画时间")]
public float duration = 0.4f;
//[Header("多久自动隐藏")]
//public float autoHdieTime = 1f;
float height; //高度
float width; //宽度
Vector2 originPos; //初始位置
private void Awake()
{
//if (selfObj == null)
//{
// selfObj = transform.GetComponent();
//}
if (moveObj == null)
{
moveObj = transform.Find("Viewport").GetComponent();
}
//去掉移动物体的射线检测
try
{
moveObj.GetComponent().raycastTarget = false;
}
catch (System.Exception)
{
throw;
}
}
void Start()
{
height = moveObj.rect.height;
width = moveObj.rect.width;
//记录初始位置
originPos = moveObj.anchoredPosition;
}
void Show()
{
switch (dir)
{
case Direction.up:
case Direction.down:
moveObj.DOAnchorPosY(originPos.y, duration).SetEase(Ease.OutQuart);
break;
case Direction.left:
case Direction.right:
moveObj.DOAnchorPosX(originPos.x, duration).SetEase(Ease.OutQuart);
break;
default:
break;
}
}
void Hide()
{
switch (dir)
{
case Direction.up:
moveObj.DOAnchorPosY(originPos.y + height, duration).SetEase(Ease.OutQuart);
break;
case Direction.down:
moveObj.DOAnchorPosY(originPos.y - height, duration).SetEase(Ease.OutQuart);
break;
case Direction.left:
moveObj.DOAnchorPosX(originPos.x - width, duration).SetEase(Ease.OutQuart);
break;
case Direction.right:
moveObj.DOAnchorPosX(originPos.x + width, duration).SetEase(Ease.OutQuart);
break;
default:
break;
}
}
public void OnPointerEnter(PointerEventData eventData)
{
Show();
}
public void OnPointerExit(PointerEventData eventData)
{
Hide();
}
}



