最終確認日

Godotでモバイル端末のキーボードの高さの取得する

要点

  • DisplayServer.virtual_keyboard_get_height() でスクリーン座標(物理ピクセル)のキーボードの高さを取得する
  • Viewport座標系(論理ピクセル)に変換する

取得方法

# スクリーン座標系のキーボードの高さを取得
var keyboard_height: float = DisplayServer.virtual_keyboard_get_height()
# スクリーン座標系の画面サイズを取得
var screen_size: Vector2 = DisplayServer.screen_get_size()
# Viewport座標系の画面サイズを取得
var viewport_size: Vector2 = get_viewport().get_visible_rect().size
# Viewport座標系とスクリーン座標系のスケールを計算
var scale_y: float = screen_size.y / viewport_size.y
# Viewport 座標系に変換する
var keyboard_height_in_viewport: float = keyboard_height / scale_y

VirtualKeyboardHelper

扱いやすいように、Autoloadに登録するヘルパーを作る。

  1. VirtualKeyboardHelper.tscnControl を親にして作成
  2. virtual_keyboard_helper.gd スクリプトをアタッチ
  3. VirtualKeyboardHelper.tscnAutoloadに登録する

virtual_keyboard_helper.gd

virtual_keyboard_helper.gd
# Autoload
# class_name VirtualKeyboardHelper
extends Control

# キーボードの高さをviewport座標系に変換して返します.
var keyboard_height_in_viewport: float:
    get:
        var screen_size: Vector2 = DisplayServer.screen_get_size()
        var viewport_size: Vector2 = get_viewport().get_visible_rect().size
        var scale_y: float = screen_size.y / viewport_size.y
        var keyboard_height: float = DisplayServer.virtual_keyboard_get_height()
        var keyboard_height_in_viewport: float = keyboard_height / scale_y
        return keyboard_height_in_viewport


# キーボードの上端のy座標をviewport座標系で返します.
var keyboard_top_in_viewport: float:
    get:
        var viewport_size: Vector2 = get_viewport().get_visible_rect().size
        var keyboard_top_in_viewport: float = viewport_size.y - keyboard_height_in_viewport
        return keyboard_top_in_viewport

SubViewportを使う時はAutoloadに登録しないほうがいいかもしれない。

関連ノート

サイトアイコン
公開日
更新日