Unity3d

图片扭动挤压浏览效果

2017-11-10  本文已影响6人  萧非子

20170708231859098.gif 20170708234757420.png

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

[RequireComponent(typeof(HorizontalLayoutGroup))]//需要组件LayoutElement
//HorizontalLayoutGroup参数设置。。。:
//left:100//图片距离左边距离
//spacing:20//俩张图片间距
//childAlignment MiddleCenter 中心//放大缩小以中心放大
//control child size:勾选width,勾选Height;//控制子大小
//child force expand:不勾选 //子,强制扩张

//新建空对象命名为Items,挂载本脚本,
public class Items : MonoBehaviour
{
//数组,手动添加子对象n个图片,图片挂载EventTriggerListener脚本
public List<GameObject> items = new List<GameObject>();
//缩放时间
public float time = 1.3f;

//原先大小  图片大小,
public Vector2 oldSize=new Vector2(300f,200f);

//放大缩小速度  
public float speed=4f;

private void Start()
{

    for (int i = 0; i < items.Count; i++)
    {
        EventTriggerListener.GetComponent(items[i]).onEnter = OnMouseEnter;
        EventTriggerListener.GetComponent(items[i]).onExit = OnMouseExit;
    }
}

void OnMouseEnter(GameObject go)
{
    EventTriggerListener.GetComponent(go).UpdateSize(oldSize * time, speed);
}

void OnMouseExit(GameObject go)
{
    EventTriggerListener.GetComponent(go).UpdateSize(oldSize, speed);
}

}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

[RequireComponent(typeof(LayoutElement))]
public class EventTriggerListener : EventTrigger
{
public delegate void VoidDelegate(GameObject obj);
//点击
public VoidDelegate onClick;
//鼠标按下
public VoidDelegate onDown;
//鼠标抬起
public VoidDelegate onUp;
//鼠标移入
public VoidDelegate onEnter;
//鼠标移出
public VoidDelegate onExit;

private Vector2 currentSize;
private Vector2 targetSize;
private float speed = 4.0f;

public static EventTriggerListener GetComponent(GameObject obj)
{
    EventTriggerListener listener = obj.GetComponent<EventTriggerListener>();
    if (listener == null)
    {
        listener = obj.AddComponent<EventTriggerListener>();
    }

    return listener;
}


public override void OnPointerClick(PointerEventData eventData)
{
    if (onClick != null)
    {
        onClick(gameObject);
    }
}
public override void OnPointerDown(PointerEventData eventData)
{
    if (onDown != null) onDown(gameObject);
}
public override void OnPointerUp(PointerEventData eventData)
{
    if (onUp != null) onUp(gameObject);
}
public override void OnPointerEnter(PointerEventData eventData)
{
    if (onEnter != null) onEnter(gameObject);
}
public override void OnPointerExit(PointerEventData eventData)
{
    if (onExit != null) onExit(gameObject);
}



private void Start()
{
    targetSize = currentSize = new Vector2(this.GetComponent<LayoutElement>().preferredWidth, this.GetComponent<LayoutElement>().preferredHeight);
}

private void Update()
{
    if (currentSize != targetSize)
    {
        currentSize = Vector2.Lerp(currentSize, targetSize, Time.deltaTime * speed);
        if (Vector2.Distance(currentSize, targetSize) <= 0.01)
        {
            currentSize = targetSize;
        }

        this.GetComponent<LayoutElement>().preferredWidth = currentSize.x;
        this.GetComponent<LayoutElement>().preferredHeight = currentSize.y;
    }
}

public void UpdateSize(Vector2 size, float speed)
{
    this.targetSize = size;
    this.speed = speed;
}

}

上一篇 下一篇

猜你喜欢

热点阅读