「Unity フレームスクリプトにLuaを使う」の版間の差分

提供: LWF Wiki
移動: 案内検索
(ページの作成:「Unity用のLWFではフレームスクリプトにASではなく<b>Lua</b>という言語を用いることで<br/> タイムライン制御やイベント送信以外に...」)
 
 
(1人の利用者による、間の16版が非表示)
1行: 1行:
 
Unity用のLWFではフレームスクリプトにASではなく<b>Lua</b>という言語を用いることで<br/>
 
Unity用のLWFではフレームスクリプトにASではなく<b>Lua</b>という言語を用いることで<br/>
タイムライン制御やイベント送信以外に様々な処理が可能なり<b>FlashでActionScriptを用いて作るような動的アニメーション</b>を制作することができます<br/>
+
フレームスクリプトでLWFやUnityのAPIを叩くことができるようになり<b>FlashでActionScriptを用いて作るような動的アニメーションや制御</b>を制作することができます<br/>
 +
処理を入れすぎるとブラックボックス化してしまう可能性があることに注意して利用してください。<br/>
 
==Luaの書き方==
 
==Luaの書き方==
 
タイムラインにLuaを書く場合、HTML5版のJavaScriptと同じように、コメントブロックにLuaスクリプトを書きます。
 
タイムラインにLuaを書く場合、HTML5版のJavaScriptと同じように、コメントブロックにLuaスクリプトを書きます。
22行: 23行:
 
<LWFファイル名>_script.txtというファイルが生成されています。<br/>
 
<LWFファイル名>_script.txtというファイルが生成されています。<br/>
 
<br/>
 
<br/>
【自身を動かすサンプル】
+
【自身を毎フレーム動かすサンプル】
 
  /* lua_enterFrame
 
  /* lua_enterFrame
 
     self.x = self.x + 1
 
     self.x = self.x + 1
30行: 31行:
 
<br/>
 
<br/>
 
<br/>
 
<br/>
 +
 
==KopiLuaInterfaceの導入==
 
==KopiLuaInterfaceの導入==
Unity上でLuaスクリプトを動かすためにKopiLuaInterfaceを導入する必要があります。<br/>
+
Unity上でLuaスクリプトを動かすためにはKopiLuaInterfaceというものを導入する必要があります。<br/>
 
*KopiLuaInterfaceのダウンロード
 
*KopiLuaInterfaceのダウンロード
 
*:http://gfootweb.webspace.virginmedia.com/KLI-bin/
 
*:http://gfootweb.webspace.virginmedia.com/KLI-bin/
 
*:KLI-1.2zipをダウンロード
 
*:KLI-1.2zipをダウンロード
 +
[[File:LWF UnityLua1.jpg|thumb|500px|none|left|zipファイルをダウンロード]]<br/>
 
*Pluginsフォルダに配置
 
*Pluginsフォルダに配置
 
*:ダウンロードしたファイルを解凍しUnityのpluginsフォルダに配置
 
*:ダウンロードしたファイルを解凍しUnityのpluginsフォルダに配置
 +
[[File:LWF UnityLua2.jpg|thumb|500px|none|left|pluginsフォルダに配置]]<br/>
 
以上で導入は完了です。<br/>
 
以上で導入は完了です。<br/>
 
<br/>
 
<br/>
 
<br/>
 
<br/>
==Luaを動かすためのスクリプトの追加==
+
 
 +
==Luaを使えるように設定==
 +
デフォルトではLWFはLuaを扱えないので、Unityで設定を変更する必要があります。<br/>
 +
<br/>
 +
Unityにてメニューから<br/>
 +
<b>Edit -> Project Settings -> Player</b><br/>
 +
を選択肢してください。<br/>
 +
[[File:LWF UnityLua3.jpg|thumb|500px|none|left|Edit -> Project Settings -> Player を選択]]<br/>
 +
<br/>
 +
InspectorにPlayerSettingsが表示されたら<br/>
 +
Other SettingsのConfiguration項目のScripting Define Symbolsの欄に<br/>
 +
<b>LWF_USE_LUA</b><br/>
 +
という記述を追加してください。<br/>
 +
[[File:LWF UnityLua4.jpg|thumb|500px|none|left|LWF_USE_LUAを記述]]
 +
<br/>
 +
<br/>
 +
<br/>
 +
 
 +
==Luaを動かしてみる==
 +
これでLWFでLuaを動かす準備が整ったので実際に動かしてみます。<br/>
 +
LWFを動かしているスクリプトに下記を追加します<br/>
 +
<br/>
 +
*一番上に追加してください
 +
using LuaInterface
 +
*Load前に追加してください
 +
TextAsset luaScript = Resources.Load("スクリプトファイルのパス") as TextAsset;
 +
Lua lua = new Lua();
 +
lua.DoString(luaScript.text);
 +
<br/>
 +
*Loadの引数に下記を追加してください。<br/>
 +
*:エディタの補完にluaStateは表示されませんが、先ほどのLWF_USE_LUAの設定を行えばエラーは発生しません。<br/>
 +
luaState:lua.luaState
 +
<br/>
 +
*Lua関連の記述を追加した場合の全体のサンプルです。<br/>
 +
using UnityEngine;
 +
using System.Collections;
 +
using LuaInterface;
 +
 +
[ExecuteInEditMode]
 +
public class LWFPlayer : LWFObject {
 +
 +
public string path;
 +
public bool useAdditionalColor = false;
 +
 +
public bool useLua = false;
 +
Lua lua = null;
 +
KopiLua.Lua.lua_State luaState = null;
 +
 +
// Use this for initialization
 +
void Start () {
 +
 +
if (useLua) {
 +
TextAsset luaScript = Resources.Load(path + "_script") as TextAsset;
 +
lua = new Lua();
 +
lua.DoString(luaScript.text);
 +
luaState = lua.luaState;
 +
}
 +
Load (path, zRate:(float)0.0001, useAdditionalColor: useAdditionalColor, luaState:luaState);
 +
 +
ScaleForHeight((int)Camera.main.orthographicSize * 2);
 +
}
 +
 +
}
 +
上記のサンプルでは対象のGameObjectのInspectorにてuseLuaにチェックを入れた場合のみスクリプトファイルを読み込むようにしています。<br/>
 +
<br/>
 +
<br/>
 +
<br/>
 +
 
 +
==LuaでUnityのAPIを利用する==
 +
LuaはLWFだけでなくUnity側のAPIも利用することができます。<br/>
 +
下記の記述をスクリプトに追加すればlogが出力されるようになります<br/>
 +
luanet.UnityEngine.Debug.Log("lua test")

2014年11月10日 (月) 02:19時点における最新版

Unity用のLWFではフレームスクリプトにASではなくLuaという言語を用いることで
フレームスクリプトでLWFやUnityのAPIを叩くことができるようになりFlashでActionScriptを用いて作るような動的アニメーションや制御を制作することができます
処理を入れすぎるとブラックボックス化してしまう可能性があることに注意して利用してください。

目次

Luaの書き方

タイムラインにLuaを書く場合、HTML5版のJavaScriptと同じように、コメントブロックにLuaスクリプトを書きます。

/* lua
    _root.mc1.x = 5
*/


実行タイミングとして、lua, lua_load, lua_postLoad, lua_enterFrame 等が使えます。
ボタンの場合、onハンドラの中に書きます。

on(press){
    /* lua
        _root.mc1.x = 5
    */
}




Luaを書いてみる

タイムラインにLuaを記述して、LWFSでコンバートするとタイムラインのスクリプトが外部ファイルとなって
LWFS_work_output/unity/<LWF名> 内にテクスチャ等と一緒に
<LWFファイル名>_script.txtというファイルが生成されています。

【自身を毎フレーム動かすサンプル】

/* lua_enterFrame
    self.x = self.x + 1
    self.y = self.y + 1
*/




KopiLuaInterfaceの導入

Unity上でLuaスクリプトを動かすためにはKopiLuaInterfaceというものを導入する必要があります。

zipファイルをダウンロード

  • Pluginsフォルダに配置
    ダウンロードしたファイルを解凍しUnityのpluginsフォルダに配置
pluginsフォルダに配置

以上で導入は完了です。


Luaを使えるように設定

デフォルトではLWFはLuaを扱えないので、Unityで設定を変更する必要があります。

Unityにてメニューから
Edit -> Project Settings -> Player
を選択肢してください。

Edit -> Project Settings -> Player を選択


InspectorにPlayerSettingsが表示されたら
Other SettingsのConfiguration項目のScripting Define Symbolsの欄に
LWF_USE_LUA
という記述を追加してください。

LWF_USE_LUAを記述




Luaを動かしてみる

これでLWFでLuaを動かす準備が整ったので実際に動かしてみます。
LWFを動かしているスクリプトに下記を追加します

  • 一番上に追加してください
using LuaInterface
  • Load前に追加してください
TextAsset luaScript = Resources.Load("スクリプトファイルのパス") as TextAsset;
Lua lua = new Lua();
lua.DoString(luaScript.text);


  • Loadの引数に下記を追加してください。
    エディタの補完にluaStateは表示されませんが、先ほどのLWF_USE_LUAの設定を行えばエラーは発生しません。
luaState:lua.luaState


  • Lua関連の記述を追加した場合の全体のサンプルです。
using UnityEngine;
using System.Collections;
using LuaInterface;

[ExecuteInEditMode]
public class LWFPlayer : LWFObject {

	public string path;
	public bool useAdditionalColor = false;

	public bool useLua = false;
	Lua lua = null;
	KopiLua.Lua.lua_State luaState = null;

	// Use this for initialization
	void Start () {

		if (useLua) {
			TextAsset luaScript = Resources.Load(path + "_script") as TextAsset;
			lua = new Lua();
			lua.DoString(luaScript.text);
			luaState = lua.luaState;
		}
		Load (path, zRate:(float)0.0001, useAdditionalColor: useAdditionalColor, luaState:luaState);

		ScaleForHeight((int)Camera.main.orthographicSize * 2);
	}

}

上記のサンプルでは対象のGameObjectのInspectorにてuseLuaにチェックを入れた場合のみスクリプトファイルを読み込むようにしています。



LuaでUnityのAPIを利用する

LuaはLWFだけでなくUnity側のAPIも利用することができます。
下記の記述をスクリプトに追加すればlogが出力されるようになります

luanet.UnityEngine.Debug.Log("lua test")