実践3:ボタンの表示

ボタンを用いることで、スクリプトの実行タイミングをユーザに委ねることができるようになる。

ボタンを表示するオブジェクトのGUID取得

表示するボタンの位置は指定したオブジェクトからの相対位置となる。
まずはボタンを表示させるオブジェクトのGUIDを取得する。
今回は、赤いブロックのGUIDを取得しよう。

ボタンの表示

スクリプト画面を開き、Globalの先頭行に以下の文を追加する。(xxxxxxは実際のGUID)
ここでは、先ほど取得したGUIDを変数「redBlock_guid」に格納している。
redBlock_guid = 'xxxxxx'

続いて、function onLoad() の1行目に以下の文を追加する。
ここでは、GUIDからオブジェクト(赤いブロック)を指定し、変数「redBlock」に格納している。【getObjectFromGUID()参考】
これで変数「redBlock」は赤いブロックとスクリプト上は同義となった。
function onLoad()
    redBlock = getObjectFromGUID(redBlock_guid)
end

以上でゲームがロードされたタイミング(onLoad)で赤いブロックを指定できる準備が整った。
ボタンを表示するには "オブジェクト.createButton()" と記述する。【createButton()参考】
まずは以下を参考に入力して、ボタンを表示させてみよう。
redBlock_guid= 'xxxxxx'

function onLoad()
    redBlock = getObjectFromGUID(redBlock_guid)
    redBlock.createButton({
        click_function = "click_func",    -- ボタンを押した時に呼び出す関数
        function_owner = self,            -- 呼び出す関数のオーナー(省略可)
        label          = "Test",          -- ボタンに表示する文字列(省略可)
        position       = {0, 1, 0},       -- オブジェクトからみたボタンの位置(省略可)
        rotation       = {0, 180, 0},     -- オブジェクトからみたボタンの向き(省略可)
        width          = 800,             -- ボタンの横幅(省略可)
        height         = 400,             -- ボタンの縦幅(省略可)
        font_size      = 340,             -- ボタンに表示するフォントの大きさ(省略可)
        color          = {0.5, 0.5, 0.5}, -- ボタンの背景色(省略可)
        font_color     = {1, 1, 1},       -- ボタンに表示するフォントの色(省略可)
        tooltip        = "This text appears on mouseover.", -- ボタンにマウスオーバーした際に表示される文字列(省略可)
    })
end

function click_func(obj, color, alt_click)
    print("ボタンを表示しているオブジェクト")
    print(obj)
    print("ボタンを押したプレイヤーの色")
    print(color)
    print("右クリックだったらtrue")
    print(alt_click)
end


色々パラメータを変えて試してみよう

オブジェクトにスクリプトを記述

さて、次は青いブロック自身にスクリプトを書いてボタンを表示してみよう。
まずは青いブロックを右クリックしてスクリプト編集画面を開こう。


スクリプトの内容はほとんど変わらないが、オブジェクトの指定方法だけ異なる。
自分自身を対象にスクリプトを動作させる場合、GUIDから指定する必要はない。
そのような場合、"self"と書くだけで動作する。

function onLoad()
    self.createButton({
        click_function = "click_func",    -- ボタンを押した時に呼び出す関数
        function_owner = self,            -- 呼び出す関数のオーナー(省略可)
        label          = "Test",          -- ボタンに表示する文字列(省略可)
        position       = {0, 1, 0},       -- オブジェクトからみたボタンの位置(省略可)
        rotation       = {0, 180, 0},     -- オブジェクトからみたボタンの向き(省略可)
        width          = 800,             -- ボタンの横幅(省略可)
        height         = 400,             -- ボタンの縦幅(省略可)
        font_size      = 340,             -- ボタンに表示するフォントの大きさ(省略可)
        color          = {0.5, 0.5, 0.5}, -- ボタンの背景色(省略可)
        font_color     = {1, 1, 1},       -- ボタンに表示するフォントの色(省略可)
        tooltip        = "This text appears on mouseover.", -- ボタンにマウスオーバーした際に表示される文字列(省略可)
    })
end

function click_func(obj, color, alt_click)
    print("ボタンを表示しているオブジェクト")
    print(obj)
    print("ボタンを押したプレイヤーの色")
    print(color)
    print("右クリックだったらtrue")
    print(alt_click)
end


オブジェクトの大きさに比例してボタンの比率が異なる。

ボタンに関するあれこれ

  • ボタンはオブジェクトを貫通して押せる。テーブルより下に表示させてオブジェクトをロックしてしまえばオブジェクトを触ると動くように見える。
  • ボタンのwidth,heightをそれぞれ"0"にすると押せないボタンになる。文字だけ表示させたいときに。
  • colorやfont_colorには実は第4パラメータまで指定できる。第4パラメータを"0"にすると見えなくなる。(例:color = {0,0,0,0})
  • 見えないけど押せるボタンを作りたいときはcolorの第4パラメータを"0"にする。
  • 文字だけ見えるボタンを作りたいときはcolorの第4パラメータを"0"にした上でfont_colorの第4パラメータを"255"にする。

タグ:

+ タグ編集
  • タグ:
最終更新:2020年10月08日 11:50