LoginSignup
19
18

More than 5 years have passed since last update.

uGUI スクロールしてないときはバーをフェードアウト

Last updated at Posted at 2014-11-27

Scroll Rect

  • スクロールバーを簡単に指定できるが、スクロールバーは常に表示されてて、Scrollbar の intaractable もマウスオーバーの時のリアクションしかないっぽい?
  • 以下を見るとOnBeginDrag や OnEndDrag などの Functionはある。
    http://docs.unity3d.com/460/Documentation/ScriptReference/UI.ScrollRect.html

  • ということで ScrollRect を継承して、ドラッグされてない時はスクロールバーを非表示にするようにスクリプトを組んでみる。

Image

スクリプト

ScrollRectPlus.cs
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.EventSystems;

public class ScrollRectPlus : ScrollRect { // ScrollRectを継承
    private Image scrollHandle; // スクロールバーのHandle(Image)
    private bool isScroll = false, isDrag = false; // フラグ

    protected override void Awake (){
        base.Awake ();
        // HandleのImageを取得
        scrollHandle = verticalScrollbar.gameObject.GetComponentInChildren<Image>();
    }

    protected override void OnEnable(){
        base.OnEnable ();
        scrollHandle.CrossFadeAlpha (0.0f, 0.0f, true);
    }

    void Update(){
        if (Mathf.Abs(velocity.y) < 10f) {
            if(!isDrag && isScroll){
                scrollHandle.CrossFadeAlpha (0.0f, 0.25f, true); // フェードアウト
                isScroll = false;
            }
        }
    }

    public override void OnBeginDrag(PointerEventData eventData){
        base.OnBeginDrag (eventData);
        isDrag = true;
        isScroll = true;

        scrollHandle.CrossFadeAlpha (0.5f, 0.25f, true);  // フェードイン
    }

    public override void OnEndDrag(PointerEventData eventData){
        base.OnEndDrag (eventData);
        isDrag = false;
    }
}

使い方

  • ScrollRect の代わりに上記スクリプトをコンポーネントに追加。オペレーションはScrollRect と同様。
  • Scrollbar の Image コンポーネントは削除する。(Image は Handleのみ)
  • Scrollbar の intaractable は Off にする。

課題

  • 上記はドラッグベースでありスクロールベースではないので、スクロールホイールに対応していない。
19
18
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
18