[C#][Lua]Luaのあれこれおぼえがき

ゲーム制作の助けになると思い、C#でツール作る練習をしとります。
そして前々から気になっていたスクリプト言語の組み込みとやらをやってました。

組み込むにあたっての手順の覚書となんかハマったところを。

準備

VisualC#2010Expressを使用してます。
1.
LuaInterfaceを落とす。
.NET Framework 4.0に対応したのを、親切な方が作ってくださってたのでそれを使う。
LuaInterface for 4.0

CustomBuiltの方をダウンロードして解凍しとく。lua51,lua511,LuaInterfaceの3つのdllが入ってる。

2.
組み込むプログラムのexeファイルと同じフォルダに、さっきの3つのdllをコピーする。
たぶんbin/Debugかbin/Release

3.
組み込むプロジェクトの参照設定を左クリック→「参照の追加」→「参照」タブ
で、さっきコピーした3つのdllのうち"LuaInterface.dll"だけ追加する。
コピーするのめんどくさがって、3つ一気に追加したら、エラー出まくって数時間頭抱えたアホはおいら一人でいいんや

4.
適当なところで、
Lua lua = new Lua();
と書いて、エラーが出なかったら成功。出たら/(^o^)\

これで準備完了。

luaファイルを読み込む
Lua lua = new Lua();
lua.DoFile( luafile );

でオッケー

DoFileの後にLua側の変数を見たり、関数を使う。
DoFileの前ではLua側にC#側の変数を登録することができる。

用済みになったら、lua.Close();でバイバイ。

Lua側のグローバル変数を見る
LuaInterfaceの偉大な力によって、超簡単に見れる。スタックwwww

var x = lua["x"];

これだけ。

※ただしDoubleに限る。intはキャストできねえぞオラってエラー出るから、Convert.ToIntつかってね☆ミ
ゲームの設定とかはもうこれでバッチリですね。


Lua側の関数を使う
lua.GetFunction("fuction name").Call(par);

引数(par)にはクラスも登録できる。すごいなーあこがれちゃうなー。

Luaでメソッドを使う時はClass:Method()みたいに「:」を使う。

ただ、privateなメンバは勿論だけど、操作できないっぽい。
既存のPointクラスとかを指定するのはNGかな。

戻り値どうすんだおい
でもーウチーPointとかーRectangle使いたいんでー戻り値だけでもーマジ必要なんすけどー
なあなたにもちゃんと対応してるLuaInterfaceさんマジリスペクトッスよ。

object[] returns = lua.GetFunction("func").Call();
var return1 = returns[0];

で問題解決。
戻り値2つ目以降は添字を変えればおk。

引数が1つなら、
var x = lua.GetFunction("getSize").Call()[0];
でもいい。

C#側の変数をLuaで使う
DoFileやDoStringを呼ぶ前に、

lua["a"] = a;

と書いとく。

勿論、引数と同じくクラスも渡せるみたい。
「いろいろ処理するメソッドを書いたクラスを渡して、あとはLuaで制御」なんていいですね。

4/22追記
Luaにプレイヤークラスを毎フレーム渡すとして、

lua["Player"] = p;

と書いて、毎フレーム代入するとメモリリークする(どうやら同名のグローバル変数が作られるみたい)

サンプル
Lua
function Console()
c.str = "(´・_・`)Luaからだよー";
c:WriteLine();
end

C#
public class myConsole
{
public string str;
public void WriteLine()
{
Console.WriteLine(str);
}
}

myConsole c = new myConsole();
lua["c"] = c;

lua.DoFile("Scripts/test1.lua");
lua.GetFunction("Console").Call();

出力
(´・_・`)Luaからだよー


ひとまずこんなもんかな。この記事書くにあたってちょこちょこ実験したりして、
いろいろ覚えれたので、新しいことする時はこうやって記事にしよう。

参考サイト・記事
YouTube/C# Scripting - Lua
結果だけでなく過程も見てください/C#でゲームのマップエディタを作る (1)
C#でゲームつくるです/Lua使ってみる
C#でゲームつくるです/Luaでオブジェクト指向っぽい何か


2012/04/12追記
プロパティgetのは出来るみたい?
スポンサーサイト

コメントの投稿

参考になるんだぜ~☆

LuaをC#で使ってみるんだぜ~☆ww

Re: 参考になるんだぜ~☆

> LuaをC#で使ってみるんだぜ~☆ww

ちょっと情報古いかもしれませんが、お役に立てれば幸いです
非公開コメント

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
プロフィール

ぴお

Author:ぴお
ようこそ

自分のゲーム制作での備忘録や製作記録を書き留めておくブログです。

■やってるサービス
Twitter:piorimumu

Pixiv
http://www.pixiv.net/member.php?id=1126385

Twitter
このページのトップへ