型・値 | 内容 | 備考 |
---|---|---|
nil |
未定義値を表します。 変数が最初に宣言された(と見なされた)とき、nilが値として与えられます。 nilは他のどんな型とも異なる型として扱われます。 |
|
true |
ブーリアン型として「真」であることを表します。 |
|
false |
ブーリアン型として「偽」であることを表します。 |
|
数値 |
実数を表します。 |
【表記例】 3、-3.0、3.1416、314.16e-2、0.31416E1 |
"文字列" ’文字列’ |
文字列を表します。 |
|
書式 | 内容 | 備考 |
---|---|---|
【宣言・参照・代入】 変数名=値 local 変数名=値 変数名1, 変数名2, ・・・=値1, 値2, ・・・ local 変数名1, 変数名2, ・・・=値1, 値2, ・・・ |
変数名には英数字とアンダースコア"_"、ピリオド"."を使用可能です。 プログラム中で最初に参照または代入が行われた場合、グローバル変数として宣言されたものと見なされます。 ローカル変数として宣言するには、変数名の前に「local」と記述します。 代入は左辺の項と右辺の項をそれぞれカンマ","で区切って記述することで、同時に複数の変数の代入を行うことが出来ます。 関数の引数として定義された変数は、その関数内部でのみ有効なローカル変数として扱われます。 forループのインデックス変数はforループ内部でのみ有効なローカル変数として扱われます。 |
ローカル変数は、宣言されたブロック内部でのみ参照可能となります。 異なる階層のブロックで同名のローカル変数が宣言されると、互いに別のローカル変数として見なされます。 【例】 x = 10 -- グローバル変数 do -- 新しいブロック local x = x -- 新しい変数 `x'、値は 10 out(0, x) --> 10 x = x+1 do -- 別のブロック local x = x+1 -- 別の新しい `x' out(1, x) --> 12 end out(2, x) --> 11 end out(3, x) --> 10 (グローバル変数) |
【宣言】 配列名={値1, 値2, ・・・} local 配列名={値1, 値2, ・・・} 【参照・代入】 配列名[インデックス]=値 配列名1[インデックス]=配列名2 |
配列名には英数字とアンダースコア"_"、ピリオド"."を使用可能です。 プログラム中で最初に宣言が行われた場合、グローバル配列として宣言されたものと見なされます。 ローカル配列として宣言する場合は、配列名の前に「local」と記述します。 インデックスは、その配列要素が最初に参照または代入が行われた時点で定義されます。 インデックスには数値、文字列を使用することが出来、連続している必要はありません。 宣言時に初期値を指定した場合、インデックスは数値の「1」から順に格納されます。 多元配列を宣言する場合は「配列名1[インデックス]=配列名2」のように、上位の配列要素に下位の配列を代入することで実現できます。 |
【2次元配列の使用例】 function main() a0={} a1={} a2={} a0[0]=0 a0[1]=1 a0[2]=2 a1[0]=10 a1[1]=11 a1[2]=12 a2[0]=20 a2[1]=21 a2[2]=22 b={} b[0]=a0 b[1]=a1 b[2]=a2 out(0, b[0][0]) -- 0 out(1, b[0][1]) -- 1 out(2, b[0][2]) -- 2 out(3, b[1][0]) -- 10 out(4, b[1][1]) -- 11 out(5, b[1][2]) -- 12 out(6, b[2][0]) -- 20 out(7, b[2][1]) -- 21 out(8, b[2][2]) -- 22 end |
書式 | 内容 | 備考 |
---|---|---|
function [関数名]([引数1], [引数2], ・・・) (関数の内容) end |
ユーザ関数の定義を行います。 関数名には英数字とアンダースコア"_"、ピリオド"."が使用できます。 引数は任意の個数を持つことが出来ますが、引数が無い場合でも、括弧"( )"は省略できません。 |
引数に用いた変数は、その関数の内部でのみ参照可能なローカル変数として扱われます。 またmain関数「function main() ・・・ end」は、Luaブロック内で必ず1つ定義しなければなりません。 Luaブロックで記述したプログラムは、main()関数から実行開始します。 |
return 戻り値1, 戻り値2, ・・・ |
関数の戻り値を定義します。 戻り値は、カンマ","で区切ることで複数指定することが出来ます。 |
【例】 function math.sgn_abs(val) if val<0 then r1=-1 elseif val>0 then r1=1 else r1=0 end if val<0 then r2=-val else val>=0 then r2=val end return r1, r2 end 上記のような関数が定義されているとき、以下のように関数の呼び出しを行うと、変数valの符号と絶対値が返ります。 val_sgn, val_abs = math.sgn_abs(val) |
if 条件式1 then 命令1 : elseif 条件式2 then 命令2 : else 命令3 : end |
条件式1が成立した場合(条件式1が真(=1)の場合)、命令1(群)を実行します。 条件式1が非成立でかつ条件式2が成立した場合、命令2(群)を実行します。 条件式1と条件式2の両方が非成立であった場合、命令3(群)を実行します。 |
elseifとelseの部分は必ずしも必要ではありません。 elseifの部分は、必要に応じて幾つでも増やすことが出来ます。 |
do 命令 : end |
命令(群)を実行します。 (do、endを省略した場合と同じです。) |
"break"によって、doブロックを強制的に抜けることが出来ます。 |
while 条件式 do 命令 : end |
条件式が成立している(真である)限り、命令(群)を繰り返し(ループ)実行します。 条件式の成立判定は、命令(群)の実行前に毎回行われます。 |
whileループを強制的に抜けるには、"break"を用います。 |
repeat 命令 : until 条件式 do |
条件式が成立している(真である)限り、命令(群)を繰り返し(ループ)実行します。 条件式の成立判定は、命令(群)の実行後に毎回行われます。 |
repeatループを強制的に抜けるには、"break"を用います。 |
for インデックス変数 = 初期値, 終了値, 加算値 do 命令 : end |
初期値で始まり終了値で終わるまで、命令(群)が実行されます。 1回のループ実行が行われる毎に、インデックス変数の値に加算値が加算されます。 加算値を省略した場合は、「加算値=1」と見なされます。 ループの終了判定は、ループ実行前に1回のみ行われます。 |
forループを強制的に抜けるには、"break"を用います。 インデックス変数は、forループの内側でのみ参照することが出来ます。 ループ内部でインデックス変数に代入が行われると、挙動は未定義となります。 |
for インデックス変数1, インデックス変数2 in {値1, 値2, ・・・} do 命令 : end |
値1で始まり値のリストが終わるまで、命令(群)が実行されます。 1回のループ実行が行われる毎に、インデックス変数1は「1、2、・・・」と更新され、インデックス変数2は「値1、値2、・・・」と更新されます。 ループの終了判定は、ループ実行前に1回のみ行われます。 |
forループを強制的に抜けるには、"break"を用います。 インデックス変数は、forループの内側でのみ参照することが出来ます。 ループ内部でインデックス変数1に代入が行われると、挙動は未定義となります。 |
break |
do、while、repeat、forブロックから強制的に抜けます。 |
|
out(行番号, 表示値, 表示値, ・・・) |
画面左上の行番号で指定した行に、表示値で指定した文字列、または数値を表示します。 行番号=0〜24(上:0〜24:下) |
表示値に文字列を指定する場合は、ダブルクォーテーション"文字列"で括ります。 文字列には半角カナや全角文字は使用できません。(表示されません。) 表示値には変数や関数を用いることが出来ます。 数値を表示する場合は、小数点以下第2位までが表示されます。 複数の表示値をつなげる場合は、各表示値をカンマ","で区切ってつなげます。 数値として解釈可能な文字列(例:"0.12")は、数値に変換されて表示されます。 行頭に半角"&"を付けると等幅フォントで表示されます。 |
--コメント文・・・[改行] --[[コメント文(改行含む)・・・]] |
マイナス符号2個以降から改行までは、コメント文と見なされます。 マイナス符号直後に左鍵括弧2個"[["を記述すると、右鍵括弧2個"]]"が現れるまでの全てのキャラクタがコメント文と見なされます。 |
|
算術演算子 | 意味 |
---|---|
-A | 符号反転 |
A + B | 加算 |
A - B | 減算 |
A * B | 乗算 |
A / B | 除算 B=0だとエラーになります。 |
A ^ B | 累乗 AのB乗を求めます。 |
関係演算子 | 意味 |
---|---|
A == B | AとBは等しい |
A ~= B | AとBは等しくない |
A > B | AはBより大きい |
A < B | AはBより小さい |
A >= B | AはB以上 |
A <= B | AはB以下 |
論理演算子 | 意味 |
---|---|
A and B | AかつB(論理積) |
A or B | AまたはB(論理和) |
not A | Aでない(否定) |
文字列演算子 | 意味 |
---|---|
A .. B | 文字列AとBの連結 |
関数名 | 内容 | 備考 |
---|---|---|
math.min(a, b, ・・・) | 最小値 |
引数として渡された変数リストの中で、最小の値を返します。 |
math.max(a, b, ・・・) | 最大値 |
引数として渡された変数リストの中で、最大の値を返します。 |
math.floor(値) | 切り捨て |
値の小数点以下を切り捨てた値を返します。 【例】math.floor(3.14)=3、math.floor(-3.14)=-4 |
math.ceil(値) | 切り上げ |
値の小数点以下を切り上げた値を返します。 【例】math.ceil(3.14)=4、math.ceil(-3.14)=-3 |
math.abs(値) | 絶対値 |
値の絶対値を返します。 【例】math.abs(3.14)=3.14、math.abs(-3.14)=3.14 |
math.sqrt(値) | 平方根 |
値の平方根(√)を返します。 値が負の数の場合、"-1.#J"を返します。(演算不能) |
math.pi | 円周率 |
円周率π(≒3.1415927)の近似値を返します。 |
math.sin(値) | 正弦 |
値に対する正弦(サイン:sin)を返します。 値の単位はラジアンです。 |
math.cos(値) | 余弦 |
値に対する余弦(コサイン:cos)を返します。 値の単位はラジアンです。 |
math.tan(値) | 正接 |
値に対する正接(タンジェント:tan)を返します。 値の単位はラジアンです。 |
math.asin(値) | 逆正弦 |
値に対する逆正弦(アークサイン:arcsin)を返します。 得られる値の単位はラジアンです。 【戻り値範囲】−π/2〜+π/2 |
math.acos(値) | 逆余弦 |
値に対する逆余弦(アークコサイン:arccos)を返します。 得られる値の単位はラジアンです。 【戻り値範囲】0〜+π |
math.atan(値) | 逆正接 |
値に対する逆正接(アークタンジェント:arctan)を返します。 得られる値の単位はラジアンです。 【戻り値範囲】−π/2〜+π/2 |
math.atan2(a, b) | 逆正接2 |
直交座標上の点(a, b)と原点を結ぶ線分が、a軸と成す角を返します。 得られる値の単位はラジアンです。 【戻り値範囲】−π〜+π なお、math.atan2(0, 0)=0となります。 |
math.deg(rad) | RADIAN→DEGREE変換 |
RADIAN値rad(ラジアン)をDEGREE値(度)に変換します。 math.deg(rad) = rad * 180 / math.pi |
math.rad(deg) | DEGREE→RADIAN変換 |
DEGREE値deg(度)をRADIAN値(ラジアン)に変換します。 math.rad(deg) = deg * math.pi / 180 |
math.mod(a, b) | 剰余 |
aの絶対値をbの絶対値で割ったときの余りを返します。 符号はaの符号をそのまま返します。 【例】math.mod(34,7)=6、math.mod(34.56,-7)=6.56、math.mod(-34,-7)=-6、math.mod(-34.56,7)=-6.56 (厳密な定義でのModuloと同値ではありません。) |
math.pow(a, b) | 累乗 |
aのb乗を返します。("a ^ b" と同じ。) |
math.exp(a) | 指数 |
自然対数の底eのべき乗(eのa乗)を返します。 【参考】e≒2.71828、math.exp(a)=math.pow(e, a) |
math.log(a) | 自然対数 |
底をeとするaの対数を返します。 【参考】math.log(a)=bのとき、a=math.exp(b)の関係がある。 |
math.log10(a) | 常用対数 |
底を10とするaの対数を返します。 【参考】math.log10(a)=bのとき、a=math.pow(10, b)の関係がある。 math.log10(a)=math.log(a)/math.log(10) |
math.ldexp(r, e) | 浮動小数点 |
実数rと2の整数e乗の乗算値を返します。 【参考】戻り値a = r * 2 ^ e |
math.frexp(a) | 逆浮動小数点 |
実数aを小数部rと指数部eに分解します。 戻り値は(r,e)となり、rは0.5以上1未満の小数となる。 a=0の場合、(0,0)を返します。 【参考】a = r * 2 ^ e |
math.random(a) | 乱数 |
0以上a未満の乱数を返します。 aを省略した場合はa=1と見なされます。 【参考】0〜100までの整数の乱数を得たい場合の数式:r=math.floor(math.random(101)) |
math.randomseed(a) | 乱数初期化 |
実数aを種として、乱数列の初期化を行います。 戻り値はnilとなります。 |
関数名 | 内容 | 備考 |
---|---|---|
function OnInit() ・・・ end | 初期化 |
初期化(Uキー押下)時にコールされます。 シナリオファイルをロードした際にもコールされます。 モデルリロード(ctrl+U押下)ではコールされません。 |
function OnReset() ・・・ end | リセット |
リセット(Rキー押下)時にコールされます。 モデルリロード(ctrl+U押下)ではコールされません。 |
function OnFrame() ・・・ end | フレーム |
毎フレームの最初にコールされます。 main()と同じですが、main()関数より優先度が高く、本関数が記述されている場合はmain()関数はコールされません。 |