困ったー

マイクラ・フォートナイト・オキュラスで困ったことを調べたブログ

「こまったー」は困ったことを調べたブログです。

スポンサーリンク


【Core Games】スクリプト(LUA)の書き方は?サンプルは?

Core Gamesは、LUAといういスクリププト言語に準じています。そんなに癖はないので、比較的とっつきやすいと思います。

LUAとは?

Extreme programming

LUAはいろんなソフトでサポートされているプログラミング言語です。

ロブロックスでもLUAに準じています。 

apicodes.hatenablog.com

 

簡単におさらいすると

〇変数

変数では特に型指定はいりません。

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」で作成します。

f:id:apicode:20210419163706p:plain

 

スクリプトは、対象となる物体の階層に入れるなど、配置する場所は注意したほうがよさそうです。

f:id:apicode:20210419163759p:plain

 

ダブルクリックでエディターが起動します。Visual Source Codeも使えるようです。

f:id:apicode:20210419163801p:plain

 

書き終えたら「F5」キーでコンパイルをします。コンパイルをしないと変更が反映されません。

 

エラー処理

実行してエラーがでると「An error has occurred」として赤い文字で原因が書かれた文字列がポップアップします。

f:id:apicode:20210426103713p:plain

 

詳細は「Event log」で参照しましょう。

文法エラーや、参照しているオブジェクトが見つからない場合などにエラーが起きやすいです。

f:id:apicode:20210426103715p:plain

 

トリガー

エリアに入ったらとか、ボタンを押したら発動するイベントの場合、トリガーが重要な役割を担います。

f:id:apicode:20210426104258p:plain

 

トリガー設置後、「F」キーでフォーカス、「V」で表示・非表示の切り替えができます。

プロパティで「Interactable」にするとFキーで発動するような操作が可能となります。

f:id:apicode:20210426104655p:plain

 

主なサンプル

Core gamesのAPIドキュメント、あるいは第三者による紹介記事などはまだまだ多いとは言えません。

 

ここでは使えそうなサンプルなどを中心に紹介します。

 

イベントのスクリプト

例えば「Game.playerJoinedEvent」というイベントコールでは、ユーザが参加した場合に発動されます。

 

以下は、ユーザが参加したときに名前を出して歓迎します。

function greetPlayersAsTheyJoin(player)
     print("Hello, " .. player.name .. "!")
end

Game.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
end

trigger.beginOverlapEvent:Connect(OnBeginOverlap)

参考:Trigger - Core Documentation

 

アバターのアニメーション

プレイヤーオブジェクトを取得後、「animationStance」を変更すると指定した名前のアニメーションをプレイします。

function greetPlayersAsTheyJoin(player)

     player.animationStance = "unarmed_dance_basic"
end

Game.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でのゲーム作りまとめ」についてはこちらを参照ください。 

apicodes.hatenablog.com

 

このブログは、ネットや書籍上の情報、個人の体験や感想を中心にまとめたものです。 正確性を期していはいますが、間違い・誤訳等あるかもしれません。 当サイトの情報によって生じたいかなる損失について一切の責任を負わないものとします. あらかじめご了承ください。

利用規約・プライバシーポリシー |〇問い合わせ