Core Gamesは、LUAといういスクリププト言語に準じています。そんなに癖はないので、比較的とっつきやすいと思います。
LUAとは?
LUAはいろんなソフトでサポートされているプログラミング言語です。
ロブロックスでもLUAに準じています。
簡単におさらいすると
〇変数
変数では特に型指定はいりません。
local myCoolVariable = 13
〇テーブル変数
配列も使えます。
local groceryList = {"apples", "snacks", "coffee"}
〇ループ文
ループ文も使えます。
for dontCareAboutThis, value in ipairs(groceryList) do
print(value)
end
またWhileを使ったループも可能です。
while true do
print("ok");
end
〇IF文
プログラミングではおなじみのIF文の分岐もサポート。
if false then
print("false")
else
print("true")
end
スクリプトの使い方
作成
スクリプトは、 「Object>Create Script>Create New Script」で作成します。
スクリプトは、対象となる物体の階層に入れるなど、配置する場所は注意したほうがよさそうです。
ダブルクリックでエディターが起動します。Visual Source Codeも使えるようです。
書き終えたら「F5」キーでコンパイルをします。コンパイルをしないと変更が反映されません。
エラー処理
実行してエラーがでると「An error has occurred」として赤い文字で原因が書かれた文字列がポップアップします。
詳細は「Event log」で参照しましょう。
文法エラーや、参照しているオブジェクトが見つからない場合などにエラーが起きやすいです。
トリガー
エリアに入ったらとか、ボタンを押したら発動するイベントの場合、トリガーが重要な役割を担います。
トリガー設置後、「F」キーでフォーカス、「V」で表示・非表示の切り替えができます。
プロパティで「Interactable」にするとFキーで発動するような操作が可能となります。
主なサンプル
Core gamesのAPIドキュメント、あるいは第三者による紹介記事などはまだまだ多いとは言えません。
ここでは使えそうなサンプルなどを中心に紹介します。
イベントのスクリプト
例えば「Game.playerJoinedEvent」というイベントコールでは、ユーザが参加した場合に発動されます。
以下は、ユーザが参加したときに名前を出して歓迎します。
function greetPlayersAsTheyJoin(player)
print("Hello, " .. player.name .. "!")
endGame.playerJoinedEvent:Connect(greetPlayersAsTheyJoin)
トリガーを使ったイベント
接触したなどのイベントをトリガーとしてアクションをする場合のスクリプトです。
トリガーの「beginOverlapEvent:Connect」では、引数1がトリガー、引数2がプレイヤーとして取得できます。
プレイヤーで「Die」にすると死亡です。
local trigger = script.parent
function OnBeginOverlap(theTrigger, player)
if player and player:IsA("Player") then
player:Die()
end
endtrigger.beginOverlapEvent:Connect(OnBeginOverlap)
参考:Trigger - Core Documentation
アバターのアニメーション
プレイヤーオブジェクトを取得後、「animationStance」を変更すると指定した名前のアニメーションをプレイします。
function greetPlayersAsTheyJoin(player)
player.animationStance = "unarmed_dance_basic"
endGame.playerJoinedEvent:Connect(greetPlayersAsTheyJoin)
参考:Player Animations & Sockets - Core Documentation
ループして動く物体
ずっと動いている物体、という場合はループ文ではなく「RotateContinuous」のように継続して動作するというコマンドを使えばすぐ実装できます。
Whileでループさせたら「無限ループだ」とエラーになりました。
script.parent(Rotation.New(0, 0, 200))
参考:Scripting in Core (Advanced) - Core Documentation
プレイヤーについての便利か関数
プレイヤーが人かどうか調べる
player:IsA("Player")
移動のベクトルを与える:
player:SetVelocity(Vector3.New(0, 0, 1000))
歩く速度を変更 初期値は640
player.maxWalkSpeed=1000
ジャンプ回数を変更 0ならジャンプしない
player.maxJumpCount = 2
参考:Player - Core Documentation
「Core Gamesでのゲーム作りまとめ」についてはこちらを参照ください。