Unity之 制作卷轴展开显示画面效果

一、效果

 Unity之 制作卷轴展开显示画面效果_第1张图片

二、思路 

使用一个矩形图片添加Mask,Mask子物体下是要展示的卷轴bg图片

Unity之 制作卷轴展开显示画面效果_第2张图片

场景演示示例 :左侧灰色的举行图片是Mask,在场景中拖动bg图片后的效果。

Unity之 制作卷轴展开显示画面效果_第3张图片

这样卷轴滚动的画面就有了,用同样的方法在添加一个卷轴让他变得更加真实

Unity之 制作卷轴展开显示画面效果_第4张图片

 使用animator录制动画,移动卷轴,同时移动卷轴背景内容,就产生了卷轴展开的效果(内容效果的展示也是如此)注意内容的展示,Mask是控制大小,同时内容图片锚点要设置成如下

Unity之 制作卷轴展开显示画面效果_第5张图片

三、脚本项目下载

控制animator动画,类似进度条效果

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

/// 
/// 卷轴拖动效果
/// 
public class ScrollEffect : MonoBehaviour
{
    public float speed=0.2f;
    public RectTransform drayScroll;
    public Animator ani;

    void Start()
    {
        
        ani.speed = 0;

    }
    public bool isDray;
    float step;
    Vector3 mouseOldPos;
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            mouseOldPos = Input.mousePosition;
        }

        if (Input.GetMouseButton(0))
        {
            if (!isDray)
                isDray = GetFirstPickGameObject(Input.mousePosition) == drayScroll.gameObject;

            //单击卷轴可移动
            if (!isDray)
                return;

            Vector2 mousePos = Input.mousePosition - mouseOldPos;
            step += mousePos.x*speed * Time.deltaTime;

            if (mousePos.x>0)
            {
                if (step>=1)
                {
                    step = 1;
                }
            }
            else
            {
                if (step <= 0)
                {
                    step = 0;
                }
            }
            ani.Play("Test", 0, step);

            mouseOldPos = Input.mousePosition;

        }

        if (Input.GetMouseButtonUp(0))
        {
            isDray = false;
            ani.StopPlayback();
        }
    }


    #region UI射线检测
    /// 
    /// 获取点击的UI类型Item
    /// 
    /// 点击屏幕坐标
    /// 
    public GameObject GetFirstPickGameObject(Vector2 position)
    {
        EventSystem eventSystem = EventSystem.current;
        PointerEventData pointerEventData = new PointerEventData(eventSystem);
        pointerEventData.position = position;
        //射线检测ui
        List uiRaycastResultCache = new List();
        eventSystem.RaycastAll(pointerEventData, uiRaycastResultCache);
        if (uiRaycastResultCache.Count > 0)
            return uiRaycastResultCache[0].gameObject;
        return null;
    }
    #endregion

}

项目下载:

链接:https://pan.baidu.com/s/13H_OIAcEEDc078tBUEiduw?pwd=syq1 
提取码:syq1

animator

1.倒放: ani.speed = -1; 0停止 1正方 -1倒放

你可能感兴趣的:(Unity,unity,游戏引擎)