Portfolio

来歴
平成 4 年 (1992年) 生まれ。
小学生低学年の頃にゲームを自分でも制作できることを知り、
C言語入門書を買うも一旦挫折する。
小学校5年の時に Macromedia Flash MX 2004 に出会い、
小規模なアニメーションの作成やミニゲームの作成を通じて
ActionScript 2 に親しむ。
その後、Adobe Flash CS3 と ActionScript 3 や Adobe Flex を使用して、
P2P 通信によるアバターチャットを作成する。
この後、しばらくプログラミングから離れるが、
cocos2d-x に出会った事によってプログラミングを再開する。
cocos2d-x を用いて音楽ゲームアプリの制作に関わるうちに、
サウンドエンジンに興味が湧き、C++ を用いて簡易的な iOS/Android 向けサウンドエンジンを作成。
現在は、Unity を用いて新たなゲームを作成しつつ、
ゲーム制作を通じて自分の理想的なゲームエンジンの姿を模索し、
日々プログラミング技術の習得に励んでいる。
スキル
プログラミング言語
- C++11/14
- クラスベースなオブジェクト指向プログラミングは可能
- ポインタや左辺値/右辺値参照はある程度理解可能
- テンプレートは簡易的な定義や使用が可能
- RTTI を無効化した環境でのプログラミングは可能
- 規格書は未読
- Java
- クラスベースなオブジェクト指向プログラミングは可能
- ジェネリクスは簡易的な定義や使用が可能
- Lua
- プロトタイプベースなオブジェクト指向プログラミングは可能
- C++ のプロジェクトに組み込み、tolua++ を用いてバインディング可能
- C#
- クラスベースなオブジェクト指向プログラミングは可能
- Linq はさわりだけ使用が可能
- JavaScript
- プロトタイプベースなオブジェクト指向プログラミングは可能
- jQuery などのライブラリを用いて調べながら軽いアニメーションは実装可能
- Python
開発環境
- cocos2d-x (ver. 3.x)
- c++ を用いて iOS/Android ゲームアプリを作成できる
- Twitter 投稿や各プラットフォームに最適化したサウンドエンジンなどのプラットフォーム依存なコードを結合できる
- GAE/j + Slim3
- Json を返すゲーム管理サーバーの作成ができる
- Datastore と Memcache を組み合わせた効率的なデータベース読み込みの実装ができる
- Unity
作品
- Android/iOS 向けの音楽ゲームです。
- 開発に関する情報
- フレームワークに cocos2d-x 3.8 を使用
- C++14 及び Lua を使用
- Jenkins による自動ビルド/デプロイの実現
- 開発期間 2 年
- 開発初期はプログラマは自分のみ
- 半年たってからアウトゲーム回りを中心に新たに 1 人プログラマを追加
- 担当範囲
- アプリ側
- ゲーム初期化コード (C++/Lua)
- Android/iOS サウンドエンジン (C++/Lua)
- リソース暗号化機構 (C++)
- Lua バインディング全般 (C/C++)
- インゲーム (C++)
- 選曲シーン (Lua)
- 楽曲リザルトシーン (Lua)
- きせかえシーン (Lua)
- ユーザー登録シーン (Lua)
- タイトルシーン (Lua)
- 画面上部や左下にある HUD (Lua)
- コルーチンを用いた疑似非同期処理機構 (Lua)
- 汎用的サーバー通信機構 (Lua)
- ゲーム管理サーバー側
- Datastore, Memcache 汎用化処理 (Java)
- Datastore 向けの csv 読み込み/書き出し処理 (Java)
- アプリ API 用 Json 書き出し汎化処理 (Java)
- アプリ API 用ユーザーセッション確立処理 (Java)
- 旧アプリバージョンからの引き継ぎ処理 (Java)
- 開発関連
- Jenkins による自動ビルドおよび deploygate へのアップロード
- 画像素材の自動スプライトアトラス化スクリプト
- 音源の自動圧縮スクリプト
- リソースの暗号化スクリプト
- 工夫点
- インゲームが快適にプレイできる工夫
- 描画では Auto-batching が効く様に描画順やリソースの調節を行った
- サウンドエンジンを自作し、タイミングを厳密に調整
- Android の幾つかの機種ではタイミング調節をしなくてもタイミングが正しい位置にあるように自動調節される
- iOS でもより厳密に時刻を取得できる
- タッチ処理を cocos2d-x に頼らない形に変更し非同期処理化
- タッチした瞬間に効果音が鳴る
- タッチした瞬間に判定だけ別スレッドで行う
- 後から来た開発者が新機能を実装しやすい様なプログラム構造
- アプリ側では以下の工夫を行った
- 全ての機能はクラス化してモジュール化
- 非同期処理をメソッドチェーンによる記述によって同期的な形で記述できる様に
- サーバー側では以下の工夫を行った
- Json 出力やユーザー認証といった共通処理の隠蔽による、個々の実装クラスの簡素化
- Datastore と Memcache の連携処理を共通化
- アプリのビルドやリリース処理の自動化
- develop ブランチにコミットがマージされると Jenkins でビルドが自動的に開始される
- ビルド開始やビルド結果は Slack に投稿される
- ビルドに成功した場合は deploygate にアップロードされ、すぐに関係者がテストできる環境を構築