SlideShare ist ein Scribd-Unternehmen logo
1 von 12
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
ご清聴ありがとうございました!

Weitere ähnliche Inhalte

Andere mochten auch

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

Andere mochten auch (20)

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

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

「禍つヴァールハイト」のハイスペックサウンド演出とは? / GTMF2019
「禍つヴァールハイト」のハイスペックサウンド演出とは? / GTMF2019「禍つヴァールハイト」のハイスペックサウンド演出とは? / GTMF2019
「禍つヴァールハイト」のハイスペックサウンド演出とは? / GTMF2019Game Tools & Middleware Forum
 
Core Animation 使って見た
Core Animation 使って見たCore Animation 使って見た
Core Animation 使って見たOCHI Shuji
 
Macアプリのインストーラ作成ツールSwift版
Macアプリのインストーラ作成ツールSwift版Macアプリのインストーラ作成ツールSwift版
Macアプリのインストーラ作成ツールSwift版Akira Hayashi
 
世界をすこしだけ前に進めるということ
世界をすこしだけ前に進めるということ世界をすこしだけ前に進めるということ
世界をすこしだけ前に進めるということYukei Wachi
 
WebSocket+Akka(Remote)+Play 2.1 Java
WebSocket+Akka(Remote)+Play 2.1 JavaWebSocket+Akka(Remote)+Play 2.1 Java
WebSocket+Akka(Remote)+Play 2.1 JavaKazuhiro Hara
 
Cocos2d-x v3.2を利用してシューティングゲームを作ろう!
Cocos2d-x v3.2を利用してシューティングゲームを作ろう!Cocos2d-x v3.2を利用してシューティングゲームを作ろう!
Cocos2d-x v3.2を利用してシューティングゲームを作ろう!Tomoaki Shimizu
 
GREE Tech Conf 2022 GREE VR Studio Laboratory - UXDev R&D Summary 2022 #GREETC
GREE Tech Conf 2022 GREE VR Studio Laboratory  - UXDev R&D Summary 2022 #GREETCGREE Tech Conf 2022 GREE VR Studio Laboratory  - UXDev R&D Summary 2022 #GREETC
GREE Tech Conf 2022 GREE VR Studio Laboratory - UXDev R&D Summary 2022 #GREETCGREE VR Studio Lab
 
Stack2017 自動化困難な状況での活動方法
Stack2017 自動化困難な状況での活動方法Stack2017 自動化困難な状況での活動方法
Stack2017 自動化困難な状況での活動方法Tatsuya Ishikawa
 
GCP・GKEで作るスケーラブルなゲーム開発環境
GCP・GKEで作るスケーラブルなゲーム開発環境GCP・GKEで作るスケーラブルなゲーム開発環境
GCP・GKEで作るスケーラブルなゲーム開発環境Yasutomo Uemori
 
cocos2d-xとCocosBuilderでゲームを作ってみよう
cocos2d-xとCocosBuilderでゲームを作ってみようcocos2d-xとCocosBuilderでゲームを作ってみよう
cocos2d-xとCocosBuilderでゲームを作ってみようTomoaki Shimizu
 
Scalatronで楽しく学ぶ関数型プログラミング
Scalatronで楽しく学ぶ関数型プログラミングScalatronで楽しく学ぶ関数型プログラミング
Scalatronで楽しく学ぶ関数型プログラミングJun Saito
 
剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術
剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術
剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術Satoshi Yamafuji
 
モバイルゲームビルドパイプラインとChatOps
モバイルゲームビルドパイプラインとChatOpsモバイルゲームビルドパイプラインとChatOps
モバイルゲームビルドパイプラインとChatOpsKLab Inc. / Tech
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011Hiroh Satoh
 
開発未経験の私がBotをつくってみた
開発未経験の私がBotをつくってみた開発未経験の私がBotをつくってみた
開発未経験の私がBotをつくってみたAika Yamazaki
 
20141218ironic advent
20141218ironic advent20141218ironic advent
20141218ironic adventYasuhiro Arai
 
Practical game development with Stingray
Practical game development with StingrayPractical game development with Stingray
Practical game development with StingrayNaoji Taniguchi
 
20150421 Geeks Night @ Money Foward
20150421 Geeks Night @ Money Foward20150421 Geeks Night @ Money Foward
20150421 Geeks Night @ Money FowardNaoki Shimizu
 

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

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

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