SlideShare a Scribd company logo
1 of 35
Component based
game engine design
@DADA246
自己紹介
• ゲームプログラマやってます
• 低レベルから GPU,web,DB まで幅広く書いて
ます
• Steam,Origin,iPad で海外ゲームを遊んでいま
す
• Starcraft2 hots 楽しいですね
はじめに
• 今回の話は 1999 ~ 2003 年付近で議論さ
れていたものです
• 特に新しい話ではありません
• ゲームごとに最適な設計は異なるので、
今回の話が正しい設計ということではあ
りません
stackoverflow
• http://
stackoverflow.com/questions/1901251/componen
「コンポーネント主体のゲームプログラム
について情報を教えてほしい」
→ コンポーネント関係のリンク集になって
いる
Entity
• プレイヤーや敵などを表現する
• Game Object とも呼ばれる
class Entity
{
public:
void Update(float time);
void Render();
}
継承
• 継承で Entity を構築した場合
継承問題
• 継承はハードコーディングなので、変化に
弱い
• FPS にて、ゲームデザイナーから
「弾を操作したい」と言われたら?
例: Unreal Tournament
Redeemer
→ 撃った弾を操作出来る
継承の追加
• 弾を操作したいため、弾クラスを継承し
て「操作可能な弾クラス」を作る
→Player クラスと似たクラスが出来てしまう
→ 継承をコーディング
しなければならない
→ コンパイルも必要
継承問題
• ゲーム開発には試行錯誤が必要
→ 開発が終盤になるほど継承関係を変更す
る手間が増える
• Entity の種類が増えると基底クラスの機能
が肥大化する
has-a
• 継承を避ける
→is-a ではなく、 has-a にする
コンポーネント
• コンポーネントを基底クラスとする
Entity
• Entity はユニークな ID とコンポーネント
のリストを持つ
→ ユニークな ID はコンポーネント管理クラ
スからコンポーネントを参照するときに
使う
class Entity
{
private:
int32_t id;
std::list<component*> componentList;
}
Entity の構築
• コンパイル時ではなく、実行時に Entity の
種類が決まる
auto pPlayer = new Entity();
pPlayer->RegisterComponent(new Human());
pPlayer->RegisterComponent(new Player());
Data Driven
• Entity の構築はコードに書かなくても良い
<Entity>
<Name>Player</Name>
<Component>Human</Component>
<Component>Player</Component>
</Entity>
{
“Name”:”Player”,
“Component”:[“Human”,”Player”]
}
ゲームエディタ
• ゲームエディタの入力から Entity を構築す
る
→ ゲームデザイナが Entity を構築できる
→ コンポーネントの組み合わせで多様な
Entity を生成出来る
コンポーネントの種類
• 更新処理や描画処理もコンポーネントと
して抽象化出来る
コンポーネントの例
• Input( コントローラー入力 )
• Updatable
• Renderable
• Physics
• Collision
• Motion
• Actor
• Audio
• Network
• AI
• Health( 体力 )
…
コンポーネントの組み合わせ
• 賑やかしのための NPC
→Collision を外して軽量化する
• 壁
→Updatable を外して軽量化する
• 音の発生地点
→Renderable を外して描画させない
LOD
• コンポーネントを動的に付け外しすると
、処理負荷を下げられる
例:カメラから遠い NPC はアニメーション
しない
pNPC->RegisterComponent(COMPONENT_MOTION );
pNPC->UnRegisterComponent(COMPONENT_MOTION );
更新頻度の変更
• 数フレームごとに実行される Updatable を
作ると、処理負荷を下げられる
例:ドアは 15 フレームに一度しか更新しな
い
auto pDoor = new Entity();
pDoor ->RegisterComponent(new DefferedUpdatable() );
更新処理
• 継承ベースの設計でよく見かける処理
→ 全 Entity の Update を呼ぶ
更新処理
• Entity を処理するのではなく、登録されて
いるコンポーネントを処理する
→ 全 Entity を検索する必要がなくなる
Messaging
• Update 処理を抽象化してしまったら、何
を呼べば良い?
→ コンポーネントに対してメッセージを投
げる
→ 処理負荷は掛かるが、ポインタよりも疎
結合に出来る
class Component
{
private:
Entity* pOwnerEntity;
public:
virtual void HandleMessage(const Message& message);
}
Messaging
• メッセージに対する処理を書いていく
void PlayerComponent::HandleMessage(const Message& message)
{
switch(message.GetType() )
{
defalut:
break;
case CREATED:
// コンポーネント生成時の処理
break;
case JUMP:
// ジャンプ時の処理
break;
case GAME_OVER:
// ゲームオーバー時の処理
break;
}
}
Messaging
• メッセージはコンポーネント間のやりと
りにも使える
void PlayerComponent::HandleMessage(const Message& message)
{
…
//Entity のユニーク ID を指定してメッセージを発行
PostMessage(enemyEntityId,new Message(DAMAGE) );
// 全 Entity にメッセージを発行
BroadcastMessage(new Message(SAVE) );
…
}
実装例
• コンポーネントはあくまでも設計論なの
で、様々な実装例がある
実装例
• Entity にコンポーネントのリストを持たせ
るパターン
→ 純粋なコンポーネント実装
class Entity
{
public:
void RegisterComponent(Component* pComponent);
void GetComponent(std::list<Component*> pComponentList);
}
実装例
• 処理速度を上げるために、 Update と
Render はコンポーネントにしないパター
ン
→ コンポーネント化は設計論の一つなので
、ゲームごとに最適解は異なるclass Entity
{
public:
void Update(float time);
void Render();
void RegisterComponent(Component* pComponent);
void GetComponent(std::list<Component*> pComponentList);
}
実装例
• コンポーネントを継承させていくパター
ン
→ コントローラー入力の代わりに自動テス
ト用ダミー入力を使うなど
実装例
• コンポーネントは C++ で書かれていなくて
も良い
→Entity の一部をゲームデザイナーが書く
懸念点
• メッセージを多用すると、ポインタアクセス
に比べて処理速度が落ちる
→ 入力処理など、処理速度が遅くても良い箇所
に限定してメッセージを使用する
• データドリブンの場合、コンパイラを通せな
いので、エラーが見つかりにくい
→ デバッグ機能を強化する
• Generic なプログラムを求められる
まとめ
• Entity を継承ではなく、 has-a にしてコン
ポーネント化する設計もある
• ゲームタイトルごとにデザイン、対象プ
ラットフォーム、開発規模が違うので、
コンポーネント化が常に正しいとは限ら
ない
設計手法の一つとして考慮するのも面白い
と思います
参考文献
• A Data Driven Game Object System(GDC 2002)
• Theory and Practice of Game Object Component Architecture
(GDC Canada 2009)
• Game Engine Architecture
• Game Programming Gems 4: A System for Managing Game
Entities
• Game Programming Gems 5: Component Based Object
Management
• Game Programming Gems 5: A Generic Component Library
• Game Programming Gems 6: Game Object Component System
• MSDN XNA Programming Guide “Application Model Overview”
Question?
ご清聴ありがとうございました

More Related Content

What's hot

継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説するTaishiYamada1
 
50分でわかるブループリントについて
50分でわかるブループリントについて50分でわかるブループリントについて
50分でわかるブループリントについてMasahiko Nakamura
 
SPAのルーティングの話
SPAのルーティングの話SPAのルーティングの話
SPAのルーティングの話ushiboy
 
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステムSEGADevTech
 
出張ヒストリア ブループリントを書くにあたって大切なこと
出張ヒストリア ブループリントを書くにあたって大切なこと出張ヒストリア ブループリントを書くにあたって大切なこと
出張ヒストリア ブループリントを書くにあたって大切なことhistoria_Inc
 
【Unity道場Houdini編】UnityとHoudiniで作るRealtimeVFX実践解説 後編
【Unity道場Houdini編】UnityとHoudiniで作るRealtimeVFX実践解説 後編【Unity道場Houdini編】UnityとHoudiniで作るRealtimeVFX実践解説 後編
【Unity道場Houdini編】UnityとHoudiniで作るRealtimeVFX実践解説 後編UnityTechnologiesJapan002
 
ゲーム開発とMVC
ゲーム開発とMVCゲーム開発とMVC
ゲーム開発とMVCTakashi Komada
 
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメント
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメントヒストリア HelixCore(Perforce) 運用レギュレーションドキュメント
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメントhistoria_Inc
 
少人数開発でもクオリティを諦めない - エンジニア視点から見る少人数開発の極意 -
少人数開発でもクオリティを諦めない - エンジニア視点から見る少人数開発の極意 -少人数開発でもクオリティを諦めない - エンジニア視点から見る少人数開発の極意 -
少人数開発でもクオリティを諦めない - エンジニア視点から見る少人数開発の極意 -historia_Inc
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドAkihiro Suda
 

What's hot (20)

継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する
 
UE4における大規模背景制作事例 最適化ワークフロー編
UE4における大規模背景制作事例 最適化ワークフロー編UE4における大規模背景制作事例 最適化ワークフロー編
UE4における大規模背景制作事例 最適化ワークフロー編
 
UE4のシーケンサーをもっともっと使いこなそう!最新情報・Tipsをご紹介!
UE4のシーケンサーをもっともっと使いこなそう!最新情報・Tipsをご紹介!UE4のシーケンサーをもっともっと使いこなそう!最新情報・Tipsをご紹介!
UE4のシーケンサーをもっともっと使いこなそう!最新情報・Tipsをご紹介!
 
50分でわかるブループリントについて
50分でわかるブループリントについて50分でわかるブループリントについて
50分でわかるブループリントについて
 
SPAのルーティングの話
SPAのルーティングの話SPAのルーティングの話
SPAのルーティングの話
 
猫でも分かるUE4のポストプロセスを使った演出・絵作り
猫でも分かるUE4のポストプロセスを使った演出・絵作り猫でも分かるUE4のポストプロセスを使った演出・絵作り
猫でも分かるUE4のポストプロセスを使った演出・絵作り
 
大規模タイトルにおけるエフェクトマテリアル運用 (SQEX大阪: 林武尊様) #UE4DD
大規模タイトルにおけるエフェクトマテリアル運用 (SQEX大阪: 林武尊様) #UE4DD大規模タイトルにおけるエフェクトマテリアル運用 (SQEX大阪: 林武尊様) #UE4DD
大規模タイトルにおけるエフェクトマテリアル運用 (SQEX大阪: 林武尊様) #UE4DD
 
ディゾブルマテリアルで表現する立体魔法陣 (UE4 VFX Art Dive)
ディゾブルマテリアルで表現する立体魔法陣 (UE4 VFX Art Dive)ディゾブルマテリアルで表現する立体魔法陣 (UE4 VFX Art Dive)
ディゾブルマテリアルで表現する立体魔法陣 (UE4 VFX Art Dive)
 
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
 
出張ヒストリア ブループリントを書くにあたって大切なこと
出張ヒストリア ブループリントを書くにあたって大切なこと出張ヒストリア ブループリントを書くにあたって大切なこと
出張ヒストリア ブループリントを書くにあたって大切なこと
 
UE4におけるレベル制作事例
UE4におけるレベル制作事例  UE4におけるレベル制作事例
UE4におけるレベル制作事例
 
UE4における大規模レベル実装ワークフローとブループリント活用事例
UE4における大規模レベル実装ワークフローとブループリント活用事例UE4における大規模レベル実装ワークフローとブループリント活用事例
UE4における大規模レベル実装ワークフローとブループリント活用事例
 
【Unity道場Houdini編】UnityとHoudiniで作るRealtimeVFX実践解説 後編
【Unity道場Houdini編】UnityとHoudiniで作るRealtimeVFX実践解説 後編【Unity道場Houdini編】UnityとHoudiniで作るRealtimeVFX実践解説 後編
【Unity道場Houdini編】UnityとHoudiniで作るRealtimeVFX実践解説 後編
 
Unreal Engine 4 Education 3 シーケンサーでリアルタイム映像作成
Unreal Engine 4 Education 3 シーケンサーでリアルタイム映像作成Unreal Engine 4 Education 3 シーケンサーでリアルタイム映像作成
Unreal Engine 4 Education 3 シーケンサーでリアルタイム映像作成
 
UE4を用いたTPS制作事例 EDF:IR レベル構成について
UE4を用いたTPS制作事例 EDF:IR レベル構成についてUE4を用いたTPS制作事例 EDF:IR レベル構成について
UE4を用いたTPS制作事例 EDF:IR レベル構成について
 
ゲーム開発とMVC
ゲーム開発とMVCゲーム開発とMVC
ゲーム開発とMVC
 
豚×京都 ~UE4でなろう破壊神~ (UE4 VFX Art Dive)
豚×京都 ~UE4でなろう破壊神~ (UE4 VFX Art Dive)豚×京都 ~UE4でなろう破壊神~ (UE4 VFX Art Dive)
豚×京都 ~UE4でなろう破壊神~ (UE4 VFX Art Dive)
 
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメント
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメントヒストリア HelixCore(Perforce) 運用レギュレーションドキュメント
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメント
 
少人数開発でもクオリティを諦めない - エンジニア視点から見る少人数開発の極意 -
少人数開発でもクオリティを諦めない - エンジニア視点から見る少人数開発の極意 -少人数開発でもクオリティを諦めない - エンジニア視点から見る少人数開発の極意 -
少人数開発でもクオリティを諦めない - エンジニア視点から見る少人数開発の極意 -
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 

Similar to Component basedgameenginedesign

Azure PlayFab トレーニング資料
Azure PlayFab トレーニング資料Azure PlayFab トレーニング資料
Azure PlayFab トレーニング資料Daisuke Masubuchi
 
ガールアックス:リアルタイム通信処理の効率的な実装
ガールアックス:リアルタイム通信処理の効率的な実装ガールアックス:リアルタイム通信処理の効率的な実装
ガールアックス:リアルタイム通信処理の効率的な実装dena_study
 
Amazon EKS によるスマホゲームのバックエンド運用事例
Amazon EKS によるスマホゲームのバックエンド運用事例Amazon EKS によるスマホゲームのバックエンド運用事例
Amazon EKS によるスマホゲームのバックエンド運用事例gree_tech
 
Game Development and Automation @ Agile Sapporo 2018 #1
Game Development and Automation @ Agile Sapporo 2018 #1Game Development and Automation @ Agile Sapporo 2018 #1
Game Development and Automation @ Agile Sapporo 2018 #1Michael Tedder
 
LEGO MINDSTORMS EV3 API
LEGO MINDSTORMS EV3 APILEGO MINDSTORMS EV3 API
LEGO MINDSTORMS EV3 APIAkira Hatsune
 
DeNAのサーバー"コード"レスアーキテクチャ
DeNAのサーバー"コード"レスアーキテクチャDeNAのサーバー"コード"レスアーキテクチャ
DeNAのサーバー"コード"レスアーキテクチャHaruto Otake
 
大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化DeNA
 
.NET Core時代のCI/CD
.NET Core時代のCI/CD.NET Core時代のCI/CD
.NET Core時代のCI/CDYuta Matsumura
 
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築gree_tech
 
Deep-Dive into Scriptable Build Pipeline
Deep-Dive into Scriptable Build PipelineDeep-Dive into Scriptable Build Pipeline
Deep-Dive into Scriptable Build PipelineHaruto Otake
 
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用Yoshifumi Kawai
 
剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術
剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術
剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術Satoshi Yamafuji
 
東海GTUG 20110910発表資料
東海GTUG 20110910発表資料東海GTUG 20110910発表資料
東海GTUG 20110910発表資料Kenji NAKAGAKI
 
【GTMF2018TOKYO】ハードウェアの性能を活かす為の、Unityの新しい3つの機能
【GTMF2018TOKYO】ハードウェアの性能を活かす為の、Unityの新しい3つの機能【GTMF2018TOKYO】ハードウェアの性能を活かす為の、Unityの新しい3つの機能
【GTMF2018TOKYO】ハードウェアの性能を活かす為の、Unityの新しい3つの機能Unity Technologies Japan K.K.
 
Unity * スマートフォン開発で学んだこと
Unity * スマートフォン開発で学んだことUnity * スマートフォン開発で学んだこと
Unity * スマートフォン開発で学んだことKatsutoshi Makino
 
20150127 jawsug京王線 ec2_config
20150127 jawsug京王線 ec2_config20150127 jawsug京王線 ec2_config
20150127 jawsug京王線 ec2_configTakayoshi Tanaka
 
TensorFlow Lite Delegateとは?
TensorFlow Lite Delegateとは?TensorFlow Lite Delegateとは?
TensorFlow Lite Delegateとは?Mr. Vengineer
 
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説Unity Technologies Japan K.K.
 
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
GoCon 2015 Summer GoのASTをいじくって新しいツールを作るGoCon 2015 Summer GoのASTをいじくって新しいツールを作る
GoCon 2015 Summer GoのASTをいじくって新しいツールを作るMasahiro Wakame
 

Similar to Component basedgameenginedesign (20)

Azure PlayFab トレーニング資料
Azure PlayFab トレーニング資料Azure PlayFab トレーニング資料
Azure PlayFab トレーニング資料
 
ガールアックス:リアルタイム通信処理の効率的な実装
ガールアックス:リアルタイム通信処理の効率的な実装ガールアックス:リアルタイム通信処理の効率的な実装
ガールアックス:リアルタイム通信処理の効率的な実装
 
Amazon EKS によるスマホゲームのバックエンド運用事例
Amazon EKS によるスマホゲームのバックエンド運用事例Amazon EKS によるスマホゲームのバックエンド運用事例
Amazon EKS によるスマホゲームのバックエンド運用事例
 
Game Development and Automation @ Agile Sapporo 2018 #1
Game Development and Automation @ Agile Sapporo 2018 #1Game Development and Automation @ Agile Sapporo 2018 #1
Game Development and Automation @ Agile Sapporo 2018 #1
 
LEGO MINDSTORMS EV3 API
LEGO MINDSTORMS EV3 APILEGO MINDSTORMS EV3 API
LEGO MINDSTORMS EV3 API
 
DeNAのサーバー"コード"レスアーキテクチャ
DeNAのサーバー"コード"レスアーキテクチャDeNAのサーバー"コード"レスアーキテクチャ
DeNAのサーバー"コード"レスアーキテクチャ
 
大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化
 
.NET Core時代のCI/CD
.NET Core時代のCI/CD.NET Core時代のCI/CD
.NET Core時代のCI/CD
 
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
 
Deep-Dive into Scriptable Build Pipeline
Deep-Dive into Scriptable Build PipelineDeep-Dive into Scriptable Build Pipeline
Deep-Dive into Scriptable Build Pipeline
 
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
 
剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術
剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術
剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術
 
東海GTUG 20110910発表資料
東海GTUG 20110910発表資料東海GTUG 20110910発表資料
東海GTUG 20110910発表資料
 
【GTMF2018TOKYO】ハードウェアの性能を活かす為の、Unityの新しい3つの機能
【GTMF2018TOKYO】ハードウェアの性能を活かす為の、Unityの新しい3つの機能【GTMF2018TOKYO】ハードウェアの性能を活かす為の、Unityの新しい3つの機能
【GTMF2018TOKYO】ハードウェアの性能を活かす為の、Unityの新しい3つの機能
 
Unity * スマートフォン開発で学んだこと
Unity * スマートフォン開発で学んだことUnity * スマートフォン開発で学んだこと
Unity * スマートフォン開発で学んだこと
 
Runtime c++editing
Runtime c++editingRuntime c++editing
Runtime c++editing
 
20150127 jawsug京王線 ec2_config
20150127 jawsug京王線 ec2_config20150127 jawsug京王線 ec2_config
20150127 jawsug京王線 ec2_config
 
TensorFlow Lite Delegateとは?
TensorFlow Lite Delegateとは?TensorFlow Lite Delegateとは?
TensorFlow Lite Delegateとは?
 
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
 
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
GoCon 2015 Summer GoのASTをいじくって新しいツールを作るGoCon 2015 Summer GoのASTをいじくって新しいツールを作る
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
 

Component basedgameenginedesign