はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】gree/unity-webviewでバウンス(スクロール領域の境界に達したときに範囲外が少し表示される奴)を無効化する

はじめに

今回はgree/unity-webviewでバウンススクロールを無効化する方法を紹介したいと思います。

github.com
techvisor.jp

ちなみに基本的な使い方は前に記事を書いたので、気になる方はチェックしてみてください。
www.hanachiru-blog.com

バウンスをオフにする

バウンスをオフにするにはWebViewObject.SetScrollBounceEnabledを用います。

private void Start()
{
    var webViewObject = new GameObject("WebViewObject").AddComponent<WebViewObject>();

    // 初期化
    webViewObject.Init(
        // NOTE: iOSでUIWebViewではなくWKWebViewを利用する(現在はほぼ必須な設定項目だと思ってもらえれば)
        enableWKWebView: true
    );
            
    // **バウンスをオフにする**
    webViewObject.SetScrollBounceEnabled(false);
        
    // URLを読み込みWebViewを表示する
    webViewObject.SetVisibility(true);
    webViewObject.LoadURL("https://www.google.co.jp/");
}

仕組み

前提ですがiOS以外はバウンスしないので、サポートされてません。
github.com

内部実装的には、WKWebView.scrollView.bouncesに対して設定を行っているだけです。

- (void)setScrollBounce:(BOOL)enable
{
    WKWebView *webView = (WKWebView *)self;
    webView.scrollView.bounces = enable;
}

github.com

developer.apple.com

一応ScrollViewにはbouncesHorizontallybouncesVerticallyといった水平・垂直のバウンスを別々に設定できるのですが、gree/unity-webviewは対応してないっぽいです。(PR送っても悪くはなさそうだが、そこまで個人的に必要なさそうですし様子見)

サイドバーをなくす

ちなみにサイドバーを消すこともできます。WebViewObject.SetScrollbarsVisibilityを用いて実現します。

private void Start()
{
    var webViewObject = new GameObject("WebViewObject").AddComponent<WebViewObject>();

    // 初期化
    webViewObject.Init(
        // NOTE: iOSでUIWebViewではなくWKWebViewを利用する(現在はほぼ必須な設定項目だと思ってもらえれば)
        enableWKWebView: true
    );
            
    // **スクロールバーの表示をなくす**
    webViewObject.SetScrollbarsVisibility(false);
        
    // URLを読み込みWebViewを表示する
    webViewObject.SetVisibility(true);
    webViewObject.LoadURL("https://www.google.co.jp/");
}

仕組み

こちらの場合はiOSAndroidに対応しています。
github.com

内部実装的にはwebView.scrollView.showsHorizontalScrollIndicator/showsVerticalScrollIndicatorに対して設定しているだけです。

- (void)setScrollbarsVisibility:(BOOL)visibility
{
    WKWebView *webView = (WKWebView *)self;
    webView.scrollView.showsHorizontalScrollIndicator = visibility;
    webView.scrollView.showsVerticalScrollIndicator = visibility;
}

github.com

developer.apple.com
developer.apple.com