SlideShare a Scribd company logo
Luaを使ったキャラクタの
スクリプティング
2017/01/25
アカツキ クライアントエンジニア 柿崎
2
2005年 名古屋大学工学部電気電子工学科卒
組込みOSの研究やったり、Javaでガラケー向けにゲーム作ったり
2005年ヤマハ入社
研究開発やったり、製品開発(楽器ではない)をする
2015年アカツキにジョイン
・情熱プログラマー
・エンジニアチームキャプテン
・不具合撲滅職人
自己紹介
3
とあるcocos2d-x開発プロジェクトの話
リアルタイムのゲームモードを新しく開発していました
最初はキャラクターを適当なアニメーションで動かしていましたが
リリースへ向けて大幅に手を加えることになりました
経緯
4
return Sequence::create(Easeout::create(TargetedAction::create(getCharacter(), MoveBy::create(0.15f, Vec2(50,20))),
CallFunc::create([this] () {
getCharacter()->setMovie(..);
}),
DelayTime::create(0.1),
TargetedAction::create(getEffect1(), Show::create()),
nullptr);
初期バージョン
Sequence直打ちつらいorz
5
• lwfを使う
• 今回はリアルタイム向けのため途中でイベントが挟まると破綻するた
め除外
• cocos studioを使う
• 今からデザイナーさんにcocos studio使ってもらうのはちょっと間に
合わない
• 独自で定義したクラスを使えない
• Luaを使う
• 最悪プログラマー(自分)が頑張ればなんとかなる
選択肢
よし!Luaスクリプトエンジンを作ろう!
6
1.5秒Aを移動
その後Aの画像をA2に変
更
その後エフェクトB表示
設計思想
Lua
Sequence::create(…)
中間モジュール(C++)
Cocos2d-x
Luaで書いた各アクションを中間モジュールに割り当てて、それをcocos2
d-xのActionに変換する形を取りました。
cocos2d::Actionと1対1に対応させてしまうと、初期バージョンとやってい
ることが変わらないため、モジュールを構造化しました。
7
親子構造でsequenceとspawnを表現する
各ノードはTargetNodeとActionが定義される
親子ノードはsequenceで実行されて、兄弟ノードはspawnで実行される
基本構造
spawn
sequence
8
HEADポインタ
A
B
start(A)
C
D
after(B)
branch(A, C)
after(D)
HEADポインタを導入することで直感的な
シーケンスの記述を可能にしました
1
2 3
4
1
2
3
4
9
#define SET_CONST(L, name) { lua_pushinteger(L, name); lua_setglobal(L, #name); }
SET_CONST(luaStack->getLuaState(), DASH);
SET_CONST(luaStack->getLuaState(), GUARD);
SET_CONST(luaStack->getLuaState(), ATC_KICK_1);
SET_CONST(luaStack->getLuaState(), ATC_KICK_2);
マジックナンバー撲滅
マジックナンバーはLuaの変数を
定義することで減らしました
10
start(easeOut(moveBy(TARGET_CHARACTER, 0.15, 50, 20), 1.5)) // キャラを0.15秒移動(easeOut)
after(setMovie(TARGET_CHARACTER, ATC_KICK_1)) // キャラをKICK_1に変更
after(delay(0.1)) // 0.1秒待ち
after(setVisible(TARGET_EFFECT1, true)) // Effect1を表示
結果
good
• 読んでわかるコードになった(気がする)
• 基本的なアニメーションは実現できて、デザイナーの意図する動きを
短期間で実現できた
more
• 設計がエンジニア寄りで非エンジニアの人に書いてもらえないかも
• 本当はLuaは一度だけ実行して後は使い回せるようにしたかった
11
という機能を年末年始で作り
ました
12
ご清聴ありがとうございました!

More Related Content

PDF
【Unite 2017 Tokyo】DIYエフェクト実装: エンジニアレスでエフェクトを組み込める環境づくり
PDF
エターナらないゲーム開発
PDF
E2E test on Nuxt.js with SSR
PPTX
DIYエフェクト実装: エンジニアレスでエフェクトを組み込める環境づくり
PPTX
SQL Serverでデータ連携をする
PPTX
VertexTextureFetchの活用について
PDF
第7回テックヒルズ『Game Engines!!~どのゲームエンジンを選ぶ?~』資料
PDF
Jvm言語とJava、切っても切れないその関係
【Unite 2017 Tokyo】DIYエフェクト実装: エンジニアレスでエフェクトを組み込める環境づくり
エターナらないゲーム開発
E2E test on Nuxt.js with SSR
DIYエフェクト実装: エンジニアレスでエフェクトを組み込める環境づくり
SQL Serverでデータ連携をする
VertexTextureFetchの活用について
第7回テックヒルズ『Game Engines!!~どのゲームエンジンを選ぶ?~』資料
Jvm言語とJava、切っても切れないその関係

Viewers also liked (20)

PDF
C++勉強会
PDF
僕と Python と 時々 NetBeans
PDF
クラッシュフィーバーのシステム構成
PDF
Cocos2d-x&CocosCodeIDE&Luaで個人開発始めました
PDF
Kinect 入門
PDF
CG 論文講読会 2013/2/12 "A reconstruction filter for plausible motion blur"
PDF
CG 論文講読会 2013/5/20 "Clustered deferred and forward shading"
PDF
BigQueryで集計するシステムを作って分かったKPI集計ツール作成
PDF
Processingによるプログラミング入門 第2回
PDF
Siv3Dで楽しむゲームとメディアアート開発
PPTX
20161129_npstudy_JunosAutomation
PPTX
[CEDEC2012]ネットワークゲームの不正行為と対策
PDF
新入社員のための大規模ゲーム開発入門 サーバサイド編
PDF
「iPhone 6s/6s Plus」発売前後の検索実績からみる、インターネットユーザー動向
PPTX
第1回 始めてみよう Web 動画 〜 基礎編 まずは iPhone から
PDF
Html5で作るiPhoneアプリケーション2010
PDF
(エンジニアから見た)
最近のスマートウォッチ事情
PDF
HTML5で作るiPhoneアプリケーション
PDF
<Yahoo!プロモーション広告>「iPhone 6」発売後はどうなる? 関連キーワード検索傾向
PDF
デブサミ2009: iPhone開発者座談会
C++勉強会
僕と Python と 時々 NetBeans
クラッシュフィーバーのシステム構成
Cocos2d-x&CocosCodeIDE&Luaで個人開発始めました
Kinect 入門
CG 論文講読会 2013/2/12 "A reconstruction filter for plausible motion blur"
CG 論文講読会 2013/5/20 "Clustered deferred and forward shading"
BigQueryで集計するシステムを作って分かったKPI集計ツール作成
Processingによるプログラミング入門 第2回
Siv3Dで楽しむゲームとメディアアート開発
20161129_npstudy_JunosAutomation
[CEDEC2012]ネットワークゲームの不正行為と対策
新入社員のための大規模ゲーム開発入門 サーバサイド編
「iPhone 6s/6s Plus」発売前後の検索実績からみる、インターネットユーザー動向
第1回 始めてみよう Web 動画 〜 基礎編 まずは iPhone から
Html5で作るiPhoneアプリケーション2010
(エンジニアから見た)
最近のスマートウォッチ事情
HTML5で作るiPhoneアプリケーション
<Yahoo!プロモーション広告>「iPhone 6」発売後はどうなる? 関連キーワード検索傾向
デブサミ2009: iPhone開発者座談会
Ad

Similar to Luaを使ったキャラクタのスクリプティング (20)

PDF
「禍つヴァールハイト」のハイスペックサウンド演出とは? / GTMF2019
PPT
Core Animation 使って見た
PDF
Macアプリのインストーラ作成ツールSwift版
PDF
世界をすこしだけ前に進めるということ
PDF
WebSocket+Akka(Remote)+Play 2.1 Java
PDF
Cocos2d-x v3.2を利用してシューティングゲームを作ろう!
PPTX
Docker meetup tokyo_public_r001
PDF
GREE Tech Conf 2022 GREE VR Studio Laboratory - UXDev R&D Summary 2022 #GREETC
PPTX
Stack2017 自動化困難な状況での活動方法
PDF
GCP・GKEで作るスケーラブルなゲーム開発環境
PDF
cocos2d-xとCocosBuilderでゲームを作ってみよう
PPTX
Scalatronで楽しく学ぶ関数型プログラミング
PDF
剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術
PDF
モバイルゲームビルドパイプラインとChatOps
PPTX
CoronaSDKのご紹介
PDF
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
PPTX
開発未経験の私がBotをつくってみた
PDF
20141218ironic advent
PPTX
Practical game development with Stingray
PDF
20150421 Geeks Night @ Money Foward
「禍つヴァールハイト」のハイスペックサウンド演出とは? / GTMF2019
Core Animation 使って見た
Macアプリのインストーラ作成ツールSwift版
世界をすこしだけ前に進めるということ
WebSocket+Akka(Remote)+Play 2.1 Java
Cocos2d-x v3.2を利用してシューティングゲームを作ろう!
Docker meetup tokyo_public_r001
GREE Tech Conf 2022 GREE VR Studio Laboratory - UXDev R&D Summary 2022 #GREETC
Stack2017 自動化困難な状況での活動方法
GCP・GKEで作るスケーラブルなゲーム開発環境
cocos2d-xとCocosBuilderでゲームを作ってみよう
Scalatronで楽しく学ぶ関数型プログラミング
剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術
モバイルゲームビルドパイプラインとChatOps
CoronaSDKのご紹介
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
開発未経験の私がBotをつくってみた
20141218ironic advent
Practical game development with Stingray
20150421 Geeks Night @ Money Foward
Ad

Luaを使ったキャラクタのスクリプティング