昨日、東京の半蔵門で行われました「gumiStudy cocos2d-Xmas Special」に参加をしてきました。 難しい話が多かったですが、色々な話が聞けました。今回は、忘れないうちにブログにまとめて行こうと思います。
gumiStudy cocos2d-Xmas Special
gumi代表取締役 國光さん
開会の挨拶もかねて、gumiの國光さんのお話です。
「国内だけでちまちまするのではなく、世界を目指していきましょう」
ゲーム市場について
コンシューマ機は年々市場規模が下がってきている。 Webブラウザーゲームは、頭打ちに。 その一方、ネイティブアプリ市場は急上昇で拡大している。(日本のネイティブ市場は2014年で、約5500億円)
現在の市場が1兆円。 これが、2016年には、5兆円の規模になる。 その内訳で、中国・韓国・日本で54%を占める。
つまり、「アジアを制するものが、世界を制する」 ここに受けるアプリを作成していかなくてはいけない。 ただ、日本で流行るものは、このアジア地域でも流行る。
gumiの取り組み
現在の売上は、「Webブラウザー」「国内ネイティブアプリ」「海外ネイティブアプリ」がほぼ1/3。
何のゲームが当たるのかわからにので、ジャンル考えずに出している。 以前は、カード要素があれば売上があるので、作る方としても面白く無い。
現在は細部までこだわって作るのが大事。 そこで生まれたのが「ブレイブフロンティア」
2年以上開発期間あり。カードゲームが全盛期のころから、作ってきた。新しいRPGを作りたい思いで作成。
また「進撃1942」 株式会社 gumi ニュースリリース:プレスリリース | 海外拠点開発タイトル「進撃1942」が韓国でリリース後9日で100万ダウンロード達成! このご時世に、どうしてもシューティングゲームが作りたいという思いで作ってきた。 最初は、有料で販売していたが、フリーにしてカカオトーク(GooglePlayのようなAndroid市場)に提供して、大ヒットした。
この結果、一番重要なものは、「オリジナリティ」のゲームを作っていくこと。 オリジナリティとは、開発者の情熱(良いゲームを世の中に送り出したい)。 この部分がとても重要になってくるのではないか
特に、これまでは同じようなカードバドルを使いまわしたり、そこになにかを付け加えたりなど、面白くない仕事が大半だったと思うが、ここからは、如何に情熱のこもったコンテンツを作るのが重要になってくる。
カジュアル、パズル、アクション、恋愛シミュレーションゲーム、スポーツなど、とにかく新しいものを試していっている。
gumiの強み。
世界展開と聞いても、ただアプリの言語をローカライズするだけというところが多い。 これでは、アプリを出すだけ。 ヒットさせるには、明確な違いがある。 海外の会社は日本で失敗している。日本人にあっているものは日本人でしかわからない。(韓国は韓国の人、中国なら中国の人、欧米でも同じ) そのようなことを加味して、ローカライズやカルチャライズ(その国に合わせてアプリを調整する)が必要。
国ごとに以下の項目に強みがあるのがgumi。
- 開発力
- 宣伝力
- 交渉力
- 法務
- コミュニティマネジメント力
まとめ
モバゲー・グリーの時代は開発者受難の時期。 自分らの意見を取り入れられず、カードばかり。
状況は変わってきている。 これからは、同じものでなく、今までになかった新しいゲームを作っていくのが大事。 そのゲームが、国内だけではなく世界にも展開ができるので、開発する側にとっても非常におもしろ時期になるのではないか?
日本だけではなく、これからは世界にも向けて、ヒットゲームを作って、業界を盛り上げていきたい。 ユーザーを楽しめるゲームを作って行きましょう!
LT
書く祭壇者が、5分間の時間でcocos2dxについての様々なトークを繰り広げるコーナーです。
ネイティブ開発アンチパターン
gumi CTO 田村さん のLT。
アンチパターンとは、問題の解決をしようとして余計にダメになってしまうこと。
フレームワークを書き換えて利用する
バージョンアップができなくなる。
解決策:書き換えない。必要なライブラリーをリンク数するだけに留める。
オレオレフレームワークを使ってしまう
自社フレームワークとして作成したが、パフォーマンスが出なかった。 ハードの非依存のフレームワークを作る人材がほぼいないので、バグが出る。 担当者が交代・退職した場合、地獄を見る。 結局は、オープンソース・商用の安定度には敵わない。
解決策:Unityやcocos2dxなどある程度実績があってバグがとれているもの。さらにバグの情報が公開されているものを使う方がいい。
cocos2dxのここがダメ
推測が困難な命名がある。(vender,prefix,getter/setter) メモリ管理が、リファレンスカウンタ(旧objective-c) 関数ポインタによるcallback関数 演算の関数化(CCPoint同士の演算不可)など
解決策:cocos2dx-3.0では、色々と改善が見られるので今後に期待
デスマのなりたち
- アバウトな指示を出す(例、ドラクエっぽいの作って
- 仕様がないので、想像で頑張って作る
- 期待したのはコレジャナイと言われる
- リテイクで現場が地獄を見る
Luaがいいみたいです
補足
時間が押し押しで、全てメモを取ることができずに断片的なものになってしまいました。すいません。 後、話のレベルが高くでよく分からない部分が多かったです。 変にフレームワークをいじると、バージョンアップ時大変なので、初心者はあまりいじらないほうがいいというのがわかりました。 個人的にはこのレベルの話がわかるようになりたいと感じました。
2Dゲームのボーンアニメーションを動かすならSpine
Oleg GorshunovさんのLT。株式会社アカツキ(Akatsuki Inc.)
お話は、2Dでのボーンアニメーションツール「Spine: 2D skeletal animation for games」についてです。 cocos2dx3.0から、ボーンアニメーションがネイティブで対応されるということで、このSpineで作成したものが簡単にCocos2dx上で動きます。 おそらく、SpriteStudioのように、画像ファイルとボーンを作成して、後はそれを貼りあわせてアニメーションを作っていくツールです。 でもを見せてもらいましたが、凄くスムーズに動いていました。 アニメーションをつける画面はBlenderのような感じです。
ボーンアニメーションの価値
コードはこんな感じでした。 [c]
//spineのライブラリーを含める
include "spine/spine-cocos2dx.h"
//使い方 //スケルトンアニメのインスタンスを作成 spine::CCSleletonAnimation *sleletonNode = spine::CCSleletonAnimation::createWithFile("spineboy/spineboy.json","spineboy/spineboy.atlas");
//配置 sleletonNode->setPosition(Point(vidibleSize.width/2,0));
//アニメを選ぶ sleletonNode->setAnimation("walk",true);
//レイヤーに追加 this->addChile(sleletonNode);
[/c]
補足
Olegさんとは、簡単にお話をさせてもらいましたが、凄く優しい感じでした。 これを使えば、複雑なアニメーションが簡単にできる感じが、でも画面を見てできるのではないかと思いました。
iOS7でストローク付きのフォントを使う
ポッピンゲームズジャパン株式会社小林さん。
cocos2dでゲームを作っていたが、最近cocos2dxを使い始めた。 ストローク付きのフォントはcocos2dx2.1.4から使えるようになった。 ストロークとは、文字に縁やシャドウを付けること。 これを使えば、ビットマップフォントを使わなくてもいいので、フォントのファイルを用意したりする必要がない。
ただiOS7で問題が。 上手く動かない。これは、cocos2dx/platform/ios/CCImage.mmにあるdrawInRect:withFont:lineBreakMode:alignmentが動いてくれないから。
解決方法は、NSString の drawInRect:withAttributes:を利用する。 これをif文でiOS7の時に、drawInRect:withAttributesを使うようにしてあげれば良い。
これについてブログがあります。 NSString の drawInRect:withAttributes: 詳しくはこちらを参考にしてください。
他にiOS7で変わったこと。
- 行間のデフォルト値が変わっている
- CCLabelTTFのVerticalのAlignmentのCenteringで文字が描画されなかったりする
- CCLabelTTFで幅固定して高さ自動設定すると文字がキレたりする
みんなで作る:cocos2d-xゲーム開発
芸者東京エンターテインメント株式会社 小橋さん。
「コードしかかけなかったエンジニアが1週間で売れるゲームを作る秘密を教えます」 それは以下の3点を実施すればいいのです。
- デザイナーとコラボ
- CocosBuilderなどのツールを利用する
- 部品化
CocosBuilderはC++になると手間が多い。 変数のバインディングがメンドクサイ。 その場合は下記のモノを使う。 kohashi/LoaderMaker_from_CCB · GitHub
変数の初期化 スマートポインタ。勝手に管理してくれる。 CCPointer cocos2dx-ext/CCPointer.h at master · ivzave/cocos2dx-ext · GitHub
この2つを組み合わせるとコードが短くなる。 コードが短くなるメリットは、開発スピードが早くなる。デザイナーさんにもわかりやすくなる。
部品化 Flashライクな開発ができる。 良い粒度で部品をたくさん用意してもらう。
-SimpleAudioEngine のカスタマイズ
株式会社シュハリ 松浦さん。
- BGMを同時に2つ再生
- 効果音の同時再生数を増やす
- 効果音毎にボリュームを変える
- ピッチを変えて再生
- BGMにシーク機能を追加
効果音毎のボリュームを変える:OpenALのゲインを使用。 ピッチを変える:OpenALのピッチを変える
サウンド関係の問題。 GalaxyS4は、シークにバグがある。 Nexsu5は、容量の大きいファイルを再生するとおかしくなる。長時間のストリーミングするとおかしくなる。
まとめ
リズムゲームを作るなら。 iOS側は簡単。 Androidは端末毎にかなり癖があるので、調整が大変。
詳しくはこちら
My latest upload : SimpleAudioEngine のカスタマイズ on @slideshare http://t.co/TasJsdglCR via @SlideShare
— Akihiro Matsuura (@syuhari) 2013, 12月 13
Cocos2d-xでのコンテンツ暗号化(お手軽)
Goodia株式会社 尾崎さん。
Resourceにあるファイルは、方法次第では抜き取られる恐れがある。 それを防ぐための暗号化のお話。
TexturePackerを利用して、画像ようのファイルを作成する。 その際、フォーマットをcczにする。 書き出す際に、「Content protection」を設定する。 ここで、8文字づつ32文字の暗号を作り、Xcodeでファイルを呼び出す際に利用する。
コードはこんな感じです。 [c]
include "support/zip_support/ZipUtils.h"
ZipUtils::ccSetPvrEncryptionKeyPart(0,0xaaaaaaaa); ZipUtils::ccSetPvrEncryptionKeyPart(1,0xbbbbbbbb); ZipUtils::ccSetPvrEncryptionKeyPart(2,0xcccccccc); ZipUtils::ccSetPvrEncryptionKeyPart(3,0xdddddddd);
[/c]
後は、同じようにキャッシュから、スプライトを呼び出して利用すればよい。
アプたまのアプたまによるアプたまのための”カジュアル”アプリ開発
株式会社Basic 堅田さん。中国語が話せる!
Basicでは、プログラマー・デザイナー・サウンドの3人体勢でアプリ開発をしている。 今回は、このチーム内での良いアプリを作成する際のベストプラクティスを紹介します。
デザインを変えたい
既に使っている画像を、デザイナーさんに投げる。 好きに上書きしてもらう。
スクリーンショットが欲しい
プロジェクトをそのまま投げる。 エミュレータで、好きに撮影をしてもらう。
BGM SEが用意出来た
プロジェクトをそのまま投げる。 このファイルを上書きしてください。
このゲーム難しすぎない
プロジェクトをそのまま投げる。 ゲームバランスに関わるパラメータを一つのファイルで管理をして、変更がわかりやすいようにしている。
結論「アプリに関わる人に、開発環境を整えることで全て丸投げできます」
Chukong Technologies 王鉄さん
cocos2dxのコミッター。
cocos2dxアプリの現状
日本では、他の国より流行っていない。
韓国では、トップアプリ15個のうち9個はcocos2dx製。 台湾では、上半期トップ30個の内、18個がcocos2dx。(Unityが6個) 中国では、トップ100の内、47%がcocos2dx製。 カジュアルゲームだけではなく、高いパフォーマンスが必要なアプリにも利用されている。
cocos2dxの今後について
cocos2d-3.0 クラス名の変更。 新しいGUIの追加。 3d-extention
3d-extentionは、今の所2.5Dの開発をサポートするために開発をしている。ただ、まだ不安定なのでalphe版を出すには時間がかかる。 将来的には、グリグリの3Dが動くようにしたい。
cロードマップ
2014-2 cocos2dx-3.0.0リリース 2014-3 cocos2dx-3.1.0リリース 3d-extention(アルファ版)リリース
パネルディスカッション「cocos2d-xを語りつくす!」
株式会社enish前田さんの質問「クロスプラットフォームの対応」
ブレイブフロンティアはiOS版が出た後に、Androidの開発をした。 大体2ヶ月で完成(課金、WebView,通信周り,デバイステストなど)、最初はAndroidにはそんなに注目していなかった。
Unityには、アセットストアなどでライブラリが共有できているが、そういったものはないのか?
課金周りはわけないといけない。 一回共通化をしようとライブラリを作ったが、失敗した。 また、中国では、GooglePlayがないので、各マーケットのSDKが必要なので、対応が難しい。
Alim杉山さんの質問「今後のcocos2dxのバージョンアップにおいて互換性は考慮されているのか
ブレイブフロンティアはcocos2dx2.0.3で作られているが、今後バージョンが上がる場合の対応はどうすれば。
アップグレードはしない方がいいのではないか? 新しいバージョンでの機能は、コードを公開しているので、自分のプロジェクトに組み込んで欲しい。
gumi 田村さん plug-in extensionなどそういった拡張を統一化することはあるのか
現在の所そこまで手が回っていない。 Androidの設定が難しいのではないかという話があるので、インストーラーを準備している。これが1月に出る予定。
cocoStudioのオープンソース化は、現在考えていない。現在進行形で、機能を入れている状態。 また、cocoStudioは、プログラマー以外の方にも使えるように作成をしているので、オープンソースをする意味があるのか。
感想
広告やプロモーションの勉強会には参加をしたことがあるのですが、こういった技術のまた大人数の勉強会には初めて参加しました。 当然、話の内容はとてもむずかしかったです。 ただ、すぐにでも使えそうなことも、色々知ることがでましたので、色々試していきたいと思います。
参加者の属性
恐らくですが、ほとんどが企業関係者で個人で開発している人はとても少なかったと思います。 背広の人がたくさんでした。 また、言語が得意な方が多い印象でした。少しだけですが、質問コーナーがあったのですが、中国語で質問をされている方が、何人もいらっしゃいました。
cocos2dxについて
ver3.0になると、かなり大きな部分の変更がありますので、いざ開発となるととてもむずかしい部分があるかもしれません。 2月に正式版が発表されるのですが、少し様子を見て使っていこうかなと思います。 TLで見た、Spineのツールが結構手軽に、良いアニメーションができるので、使ってみたいと感じました。
cocos2dx本の作者の方とお話ができた
清水さんと松浦さんとお話ができたことが、今回滋賀から出てきてよかったと思える点です。 日本語の情報が少ない中、とても重宝しました。今後のレベルアップするために「こうしたらいい」のでないかというお話も聞くことができたので、実践していきたいです。
反省点
懇親会の時に、人の多さなどで少し行動が遅れたのが反省点です。 もう少し積極的に動けるようにしたかった。 また、写真をとったのですが、遠い+画像のサイズが大きすぎるなど、ブログで利用するには難しかったので、 次回は、この反省を活かしたいです。
今後
話を聞く限り、ネイティブ市場はヒットするのは難しくなっていますが、急に衰退をする流れではなく、またcocos2dx自体も、多くの新しい動きがあるので、いまやっていることを上手くいかせる状況なのではないかと感じました。
私自信、ゲームを作ることが本当にやりたかったことなんだなと実際にゲームを作っていて感じています。 アプリ開発は、開発者の情熱なんですよ。 楽しんで作ってますか、自分でそのゲームを遊んでますか。
おまけ
会場でもらえたcocos2dxの秘伝書入りUSBです!(まだ中身見ていない) 結構細かく作られてました。
なお、メインの本とamazonギフト券のじゃんけん大会はダメでした。