モジュール#

VCIスクリプトは複数のモジュールに分割できます。モジュールは require 関数によって読み込むことができます。
VCIObject コンポーネントの Scripts プロパティに追加された main 以外のスクリプトはモジュールとして読み込むことができます。
require の引数には Scripts > Name に入力した名前を指定します。

require 関数は、まず package.loaded テーブルを調べて、指定した名前のモジュールが既に読み込まれているかどうかを判断します。読み込まれている場合、requirepackage.loaded[指定したモジュール名] に格納されている値を返します。そうでない場合は、モジュールを新規に読み込みます。

注釈

バーチャルキャスト2.7.5aより前のバージョンでは、require 関数は常に新規にモジュールを読み込みます。したがって、同じモジュールを複数回 require すると、各々の呼び出しで別々のインスタンスが生成されます。
バーチャルキャスト2.7.5a以降では、require 関数は一度読み込んだモジュールを package.loaded テーブルに保存し、2回目以降の require では同じインスタンスを返すようになりました。あるVCIに含まれるLuaコード全体で、同じモジュールを2回以上requireしている場合、挙動が変わる可能性があります。以前の挙動に戻すには require 直後に package.loaded = nil を実行してください。

スクリプト中のモジュールの呼び出し方は以下のサンプルコードを参考にしてください。

main.lua#
-- math_custom に module の機能を格納する
local math_custom = require("math_custom")

local low = -5
local high = 1000
print(math_custom.clamp(low, 0, 300)) -- 0
print(math_custom.clamp(high, 0, 300)) -- 300
math_custom.lua#
local module = {} -- この名前は何でも良い

function module.clamp(value, min, max)
    if value < min then
        value = min;
    elseif value > max then
        value = max;
    end
    return value;
end

return module