この文書の現在のバージョンと選択したバージョンの差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
vci:script:luatutorial [2021/06/23 16:50] t-daihisa |
vci:script:luatutorial [2023/11/30 20:02] (現在) pastatto Lua 5.2 リファレンスマニュアルのページをWikiページに差し替え |
||
---|---|---|---|
ライン 17: | ライン 17: | ||
Luaを使ったプログラミングを俯瞰する為の基本的なチュートリアルになります。 | Luaを使ったプログラミングを俯瞰する為の基本的なチュートリアルになります。 | ||
- | Luaの基本を把握した上で [[vci:script:reference|VCIスクリプトリファレンス]] を参考にしていただけると、VCIで様々な事ができるかと思います。 | + | Luaの基本を把握した上で [[https://developer.virtualcast.jp/vci-docs/api/|VCIスクリプトリファレンス]] を参考にしていただけると、VCIで様々な事ができるかと思います。 |
==== 1.Luaのコメントについて ==== | ==== 1.Luaのコメントについて ==== | ||
ライン 66: | ライン 66: | ||
※1 ""をつける事で、文字列なのか変数なのか区別をつける事ができます。 | ※1 ""をつける事で、文字列なのか変数なのか区別をつける事ができます。 | ||
+ | <wrap notice right>⇒ [[vci/script/console]]</wrap>\\ | ||
==== 3.変数と型 ==== | ==== 3.変数と型 ==== | ||
ライン 93: | ライン 94: | ||
**変数の型は代入したデータによって動的に決まります。**\\ | **変数の型は代入したデータによって動的に決まります。**\\ | ||
なので、変数宣言時に型を宣言する必要はなく、変数のみ宣言し代入演算子で直接データを代入できます。\\ | なので、変数宣言時に型を宣言する必要はなく、変数のみ宣言し代入演算子で直接データを代入できます。\\ | ||
- | 全ての型を知りたい場合はLua公式ドキュメントをご確認ください。([[http://milkpot.sakura.ne.jp/lua/lua52_manual_ja.html#2.1|値と型]]) | + | 全ての型を知りたい場合はLua公式ドキュメントをご確認ください。 |
+ | |||
+ | [[vci/script/luareference|Lua 5.2 リファレンスマニュアル]] - 2.1 値と型 | ||
==== 4.変数のスコープ ==== | ==== 4.変数のスコープ ==== | ||
ライン 103: | ライン 106: | ||
print("Grab : "..GranCount) | print("Grab : "..GranCount) | ||
| | ||
- | --掴んでる回数が3の倍数か判定 | + | --つかんでる回数が3の倍数か判定 |
local num = GranCount % 3 | local num = GranCount % 3 | ||
if num == 0 then | if num == 0 then | ||
ライン 282: | ライン 285: | ||
上記はsubitemがbellだった場合はlinlinlinと音をならし、bellじゃない場合はbellではない事を表示するサンプルです。\\ | 上記はsubitemがbellだった場合はlinlinlinと音をならし、bellじゃない場合はbellではない事を表示するサンプルです。\\ | ||
''変数 == 値'' という風に条件を指定して ''then'' の後に処理を書きます。\\ | ''変数 == 値'' という風に条件を指定して ''then'' の後に処理を書きます。\\ | ||
- | 条件式には [[http://milkpot.sakura.ne.jp/lua/lua52_manual_ja.html#3.4.3|関係演算子]] や [[http://milkpot.sakura.ne.jp/lua/lua52_manual_ja.html#3.4.4|論理演算子]] を使う事ができます。\\ | + | 条件式には **関係演算子** や **論理演算子** を使う事ができます。\\ |
これらの演算子を使う事である程度の複雑さなら条件として記述できます。\\ | これらの演算子を使う事である程度の複雑さなら条件として記述できます。\\ | ||
- | [[http://milkpot.sakura.ne.jp/lua/lua52_manual_ja.html#3.3.4|制御構造]] | + | |
+ | [[vci/script/luareference|Lua 5.2 リファレンスマニュアル]]\\ | ||
+ | - 3.3.4 制御構造\\ | ||
+ | - 3.4.3 関係演算子\\ | ||
+ | - 3.4.4 論理演算子\\ | ||
==== 8.for文 while文 ==== | ==== 8.for文 while文 ==== | ||
ライン 309: | ライン 317: | ||
iは指定しなければfor文を繰り返す毎に1加算されます\\ | iは指定しなければfor文を繰り返す毎に1加算されます\\ | ||
''for iの初期値, 繰り返す回数, iに加算する値 do'' と書くとiに加算する値を変更できます。\\ | ''for iの初期値, 繰り返す回数, iに加算する値 do'' と書くとiに加算する値を変更できます。\\ | ||
- | テーブル型と組み合わせる事で複数の要素をいっきに取り出したり処理できるので、大量の操作をするのに向いています。\\ | + | テーブル型と組み合わせる事で複数の要素をいっきに取り出したり処理できるので、大量の操作をするのに向いています。 |
- | [[http://milkpot.sakura.ne.jp/lua/lua52_manual_ja.html#3.3.5|for文]] | + | |
+ | [[vci/script/luareference|Lua 5.2 リファレンスマニュアル]] - 3.3.5 for文 | ||
=== while文 === | === while文 === | ||
ライン 334: | ライン 343: | ||
条件を満たすまでの間、while文の中の処理を繰り返します。\\ | 条件を満たすまでの間、while文の中の処理を繰り返します。\\ | ||
while文の中で条件から抜け出す処理を書かないと無限ループするので注意しましょう。\\ | while文の中で条件から抜け出す処理を書かないと無限ループするので注意しましょう。\\ | ||
- | [[http://milkpot.sakura.ne.jp/lua/lua53_manual_ja.html#3.3.4|制御構造]] | + | |
+ | [[vci/script/luareference|Lua 5.2 リファレンスマニュアル]] - 3.3.4 制御構造 | ||
==== 9.イベント関数を使う ==== | ==== 9.イベント関数を使う ==== | ||
ライン 340: | ライン 350: | ||
<file lua main.lua> | <file lua main.lua> | ||
function onGrab(target) | function onGrab(target) | ||
- | print(target.."を掴みました") | + | print(target.."をつかみました") |
end | end | ||
ライン 348: | ライン 358: | ||
function onUse(use) | function onUse(use) | ||
- | print(use.."を掴んだ状態でグリップボタンが押されました") | + | print(use.."をつかんだ状態で使用されました") |
end | end | ||
ライン 368: | ライン 378: | ||
</file> | </file> | ||
- | VCIを掴んだ時、離した時、グリップした時、触れた時、離れた時等…\\ | + | VCIをつかんだ時、離した時、使った時、触れた時、離れた時等…\\ |
- | VCIを使ってる状態を条件にして実行する関数を [[vci:script:reference:eventfunction|イベント関数]] といいます。 | + | VCIを使ってる状態を条件にして実行する関数を [[https://developer.virtualcast.jp/vci-docs/api/events/index.html|イベント関数]] といいます。 |
また、イベント関数には**引数**を設定できます。\\ | また、イベント関数には**引数**を設定できます。\\ | ||
引数とは、**関数が情報を受け取る仕組み**です。\\ | 引数とは、**関数が情報を受け取る仕組み**です。\\ | ||
イベント関数の場合は **SubItemのgameobject名が引数に渡される** という決まりがあります。\\ | イベント関数の場合は **SubItemのgameobject名が引数に渡される** という決まりがあります。\\ | ||
- | イベント関数でSubitemの名前が受け取れると何がいいのか?といいますと… ''function onGrab(target)'' の ''target'' の文字列を見る事で、**どのSubitemを掴んだのか?**を知る事ができます。\\ | + | イベント関数でSubitemの名前が受け取れると何がいいのか?といいますと… ''function onGrab(target)'' の ''target'' の文字列を見る事で、**どのSubitemをつかんだのか?**を知る事ができます。\\ |
- | 掴んだアイテム名を知る事ができるので、そのアイテムに対して処理が施せるわけです。 | + | つかんだアイテム名を知る事ができるので、そのアイテムに対して処理が施せるわけです。 |
(引数…例えば、所持金に対して、買えるジュースの本数を計算関数があるとします。この場合、関数を実行するのに所持金を知る必要があります。この所持金が引数にあたります。) | (引数…例えば、所持金に対して、買えるジュースの本数を計算関数があるとします。この場合、関数を実行するのに所持金を知る必要があります。この所持金が引数にあたります。) | ||
ライン 399: | ライン 409: | ||
関数は自作する事ができます。\\ | 関数は自作する事ができます。\\ | ||
作成する場合は ''function 任意の関数名()'' で宣言し…関数の処理を書いて ''end'' で囲います。\\ | 作成する場合は ''function 任意の関数名()'' で宣言し…関数の処理を書いて ''end'' で囲います。\\ | ||
- | 関数を実行する時は [[vci:script:reference:eventfunction|イベント関数]] の中で ''作成した関数名()'' と書く事で実行できます。\\ | + | 関数を実行する時は [[https://developer.virtualcast.jp/vci-docs/api/events/index.html|イベント関数]] の中で ''作成した関数名()'' と書く事で実行できます。\\ |
VCIスクリプトでは自作の関数はイベント関数を経由して実行します。 | VCIスクリプトでは自作の関数はイベント関数を経由して実行します。 | ||
==== 11.関数の引数と戻り値 ==== | ==== 11.関数の引数と戻り値 ==== | ||
- | {{:モデル作成:vci作成:function.png?direct&200|}} | + | {{vci:script:function.png?direct&200|}} |
関数とは、ある入力に対して処理を行い、その結果を返してくれます。 | 関数とは、ある入力に対して処理を行い、その結果を返してくれます。 | ||
ライン 414: | ライン 424: | ||
function ShowPosition(target) | function ShowPosition(target) | ||
- | local pos = vci.assets.GetSubItem(target).GetPosition() | + | local pos = vci.assets.GetTransform(target).GetPosition() |
local posc = tostring(pos) | local posc = tostring(pos) | ||
local message = target.."の現在位置は"..posc.."です" | local message = target.."の現在位置は"..posc.."です" | ||
ライン 471: | ライン 481: | ||
ランダム関数をつかえばおみくじなども作れます。 | ランダム関数をつかえばおみくじなども作れます。 | ||
- | Luaのライブラリは [[http://milkpot.sakura.ne.jp/lua/lua52_manual_ja.html|Lua 5.2 リファレンスマニュアル]] に書かれています。\\ | + | Luaのライブラリは [[vci/script/luareference|Lua 5.2 リファレンスマニュアル]] に書かれています。\\ |
- | VCIで使用可能なライブラリは[[vci:script:reference|VCIスクリプトリファレンス]]の他、[EmbeddedScriptWorkspace]フォルダ内の[types.lua]からも定義されてる関数を確認する事ができます。 | + | VCIで使用可能なライブラリは[[https://developer.virtualcast.jp/vci-docs/api/|VCIスクリプトリファレンス]]の他、[EmbeddedScriptWorkspace]フォルダ内の[types.lua]からも定義されてる関数を確認する事ができます。 |
※1 使えるライブラリには制限があります。 | ※1 使えるライブラリには制限があります。 | ||
ライン 478: | ライン 488: | ||
==== 13.使えるライブラリの確認について ==== | ==== 13.使えるライブラリの確認について ==== | ||
- | [[vci:top|VCI TOP]] の **使えるライブラリ一覧** よりヘルプのファイルをダウンロード。\\ | + | [[vci/script/reference|旧VCIスクリプトリファレンス]] の **リファレンス(自動出力)** より''vcireferencedoc.zip''のファイルをダウンロード。\\ |
(Lua自体のライブラリも確認できます) | (Lua自体のライブラリも確認できます) | ||
- | VCIのライブラリは [[vci:script:reference|VCIスクリプトリファレンス]] より確認できます。 | + | 現在のVCIのライブラリは [[https://developer.virtualcast.jp/vci-docs/api/|新VCIスクリプトリファレンス]] より確認できます。 |
また、**Luaのみのプログラミング**をしたい場合であれば [[http://codepad.org/|codepad]] で簡易的な確認をする事ができます。\\ | また、**Luaのみのプログラミング**をしたい場合であれば [[http://codepad.org/|codepad]] で簡易的な確認をする事ができます。\\ | ||
※上記は当然VCI固有の処理はできないので、純粋なLuaのプログラミングに使用します。 | ※上記は当然VCI固有の処理はできないので、純粋なLuaのプログラミングに使用します。 |