実践4:オブジェクトの移動

前回覚えたボタンの表示にオブジェクトの移動を組み合わせる。
まずはボタンを押したらオブジェクトが移動するだけの簡単なスクリプトを組んでみる。

スクリプト編集画面の表示

実践3の要領で緑のブロックのスクリプト編集画面を表示する。

自分が移動するスクリプト

表示したスクリプト編集画面から、実践3と同一のボタン表示プログラムを入力する。
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

今回はボタンを押した時に移動させたいので click_func()の中身を書き換える。
オブジェクトの移動には setPositionSmooth() を使用する。【setPositionSmooth()参考】
指定する座標はGizmoツールで指定する数値と同一。
function click_func(obj, color, alt_click)
    self.setPositionSmooth({0, 2, 0})
end

左右クリックで移動先を変えたり、押した人を表示したりできる。
function click_func(obj, color, alt_click)
    msg = Player[color].steam_name .. " clicked"
    broadcastToAll(msg)
    if alt_click then
        self.setPositionSmooth({0, 2, 0})
    else
        self.setPositionSmooth({4, 2, 4})
    end
end

同じ手順でオブジェクトの回転もできる。【setRotationSmooth()参考】
function click_func(obj, color, alt_click)
    msg = Player[color].steam_name .. " clicked"
    broadcastToAll(msg)
    if alt_click then
        self.setRotationSmooth({0, 0, 0})
    else
        self.setRotationSmooth({0, 180, 0})
    end
end

他のオブジェクトを移動させるスクリプト

ボタンの表示の際と同様にオブジェクトを指定してあげるとそのオブジェクトが移動する。
redBlock_guid = 'xxxxxx'

function onLoad()
    redBlock = getObjectFromGUID(redBlock_guid)
    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)
    msg = Player[color].steam_name .. " clicked"
    broadcastToAll(msg)
    if alt_click then
        redBlock.setPositionSmooth({0, 2, 0})
        redBlock.setRotationSmooth({0, 0, 0})
    else
        redBlock.setPositionSmooth({-4, 2, 4})
        redBlock.setRotationSmooth({0, 180, 0})
    end
end

タグ:

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