41
Asset Storeに出す為 Editor開発入門 さいたま開発勉強会 vol6 三上 浩平 13120日日曜日

Asset Storeに出すためのEditor開発入門

Embed Size (px)

DESCRIPTION

さいたま開発勉強会 vol.6の発表資料です

Citation preview

Page 1: Asset Storeに出すためのEditor開発入門

Asset Storeに出す為のEditor開発入門

さいたま開発勉強会 vol6

三上 浩平

13年1月20日日曜日

Page 2: Asset Storeに出すためのEditor開発入門

自己紹介

• 三上 浩平(@mi_kami)

• 自分のWebサイト: http://mkgames.me

• 会社ではeclipseプラグインの開発をしています

• 家でUnity使ってゲームを作っています

13年1月20日日曜日

Page 3: Asset Storeに出すためのEditor開発入門

THE 破壊(Break it!)

• 1週間で作ったUnityのゲーム(iOS/Android)

13年1月20日日曜日

Page 4: Asset Storeに出すためのEditor開発入門

SimpleData• C82で頒布したUnityのAsset

• Unity版Core Dataみたいなもの

13年1月20日日曜日

Page 5: Asset Storeに出すためのEditor開発入門

ateliate• 電子書籍が作れるかもしれないMacアプリ

• C78で頒布 → ねじさん買いにきた!!!

13年1月20日日曜日

Page 6: Asset Storeに出すためのEditor開発入門

ギークハウス武蔵小杉• 神奈川県川崎市にあるシェアハウス• GGJ in ギークハウス(参加者募集中)

• 1/25~1/27 → http://mkgames.me/ggj

• Unity勉強会 in ギークハウス武蔵小杉

• 第2回: 2/17 → http://atnd.org/events/36103

• コースを借りてミニ四駆イベント(2月中)

• 大会に出る人とかArduinoを載せる人とか

13年1月20日日曜日

Page 7: Asset Storeに出すためのEditor開発入門

UnityのEditorを作ろう

13年1月20日日曜日

Page 8: Asset Storeに出すためのEditor開発入門

なんで?• ゲーム開発にはツールがたくさん必要!• 例: (ソーシャルでない)カードゲーム作るとき

• カードのバランスを編集する為のエディタ(プログラマでなくても編集できるように)

• ゲームのルールを変更する為のエディタ• 規模が大きくなると、作りたいゲームに合わせて自身でツールも開発する必要がある

13年1月20日日曜日

Page 9: Asset Storeに出すためのEditor開発入門

Unityのツールを作る利点

• カードのバランスを編集するなら、ExcelやXMLを編集してインポートでは駄目?

• 別にUnityでツール作らなくても好きな環境で作るし...。

• Unityでツールを作るとAsset Storeに出せる!!(利点)

13年1月20日日曜日

Page 10: Asset Storeに出すためのEditor開発入門

AssetStoreとは

• ユーザーが3Dモデルやツールを購入する為のストア

• 購入するだけでなく、販売することも可能

• 無料~$100以上するものまで様々

13年1月20日日曜日

Page 11: Asset Storeに出すためのEditor開発入門

Assetが作れると...

• ゲームを作ってて、何かに困ったのでツール(Asset)を作った

• 自分が困った = 他にも困ってる人がいる

• ゲームを作るついでに作ったツールをAsset Storeに出して、それを売れる!!

• 自分が何に困っていて、他の人をどう便利にできるか考えよう

13年1月20日日曜日

Page 12: Asset Storeに出すためのEditor開発入門

例1: NGUI

• UIを作成する為のAsset

• Unityでゲームを作ったがまったくヒットせず、このAssetだけが大ヒット

• フレームワークが良く考えられている

• EditorとInspectorの拡張

13年1月20日日曜日

Page 13: Asset Storeに出すためのEditor開発入門

例2: CutScene

• よくある3Dのムービーシーンを作る為のAsset

• ゴリゴリ矩形を描画してFlashのタイムラインのようなものを実装している

13年1月20日日曜日

Page 14: Asset Storeに出すためのEditor開発入門

Assetを作りましょう

13年1月20日日曜日

Page 15: Asset Storeに出すためのEditor開発入門

Editorを作ろう• Editorとは、何かを編集するための領域(Window)

• この領域に対して、ユーザーは自由にGUIパーツを配置したり描画できる

• Editor以外にも、InspectorやSceneビューを拡張できる

• これら全てをまとめてパッケージングしたものをAsset Storeで公開

Editor

Scene

Inspector

13年1月20日日曜日

Page 16: Asset Storeに出すためのEditor開発入門

目次1. Editorの作り方の基本

2. キーボード入力とマウス入力

3. データの持ち方

4. 矩形と線の描画

5. AssetStoreの出し方

13年1月20日日曜日

Page 17: Asset Storeに出すためのEditor開発入門

1. Editorの作り方の基本

13年1月20日日曜日

Page 18: Asset Storeに出すためのEditor開発入門

Editorを実装する• EditorWindowを継承したクラスを作る

• Init()でEditorWindow.GetWindow()を呼ぶusing System;using UnityEngine;using UnityEditor;

public class TestWindow : EditorWindow{ [MenuItem ("Window/Test Window %v")] static void Init () { TestWindow window = (TestWindow)EditorWindow.GetWindow (typeof(TestWindow)); }}

13年1月20日日曜日

Page 19: Asset Storeに出すためのEditor開発入門

メニューへの登録

• MenuItem属性を追加するとメニューに登録される

• “Window/Test Window” → /で区切ると階層化

• Windowメニューの中にTestWindowメニューを作る

using System;using UnityEngine;using UnityEditor;

public class TestWindow : EditorWindow{ [MenuItem ("Window/Test Window")] static void Init () { }}

13年1月20日日曜日

Page 20: Asset Storeに出すためのEditor開発入門

処理の記述• public void OnSelectionChange()

• ProjectビューやHierarchyビューで要素が選択された時に呼ばれる

• public void OnGUI()

• 描画のタイミングで呼ばれる• ユーザからの入力/各種描画処理

• EditorWindowを継承した抽象クラスを作り、OnGUIの処理を分割すると良い

13年1月20日日曜日

Page 21: Asset Storeに出すためのEditor開発入門

GUIを配置する方法• GUIを配置する為の3つの方法

• GUI : 好きな座標に、好きな大きさで配置

• GUILayout : 自動でレイアウト

• GUIEditorLayout : Editor用のラベルとセットになったUI

GUILayout GUI13年1月20日日曜日

Page 22: Asset Storeに出すためのEditor開発入門

GUIの実装方法• EditorGUILayout.TextField(“Object

Name”, variable);• 返却値を変数に格納• その変数をTextFieldの引数として渡す• 他のGUIの実装方法も同様

public class TestWindow : EditorWindow{ public string hoge; static void OnGUI () { hoge = EditorGUILayout.TextField(“Object Name”, hoge); }}

13年1月20日日曜日

Page 23: Asset Storeに出すためのEditor開発入門

2. キーボードとマウス入力

13年1月20日日曜日

Page 24: Asset Storeに出すためのEditor開発入門

キー入力の実装• ショートカット等を作るだけでEditorがより使いやすくなる

• 簡単そうに見えるものでも、キー入力の処理は意外と難しい(Projectビューとか)

• OnGUI()でキー入力イベントを処理する

• Event.current.keyCodeで入力されたキーを取得

13年1月20日日曜日

Page 25: Asset Storeに出すためのEditor開発入門

マウス入力の実装• OnGUI()でマウスイベントを処理する

• Event.current.mousePositionで座標を取得

• Event.current.typeでイベントの種類を取得

• EventType.ContextClick : 右クリック

• EventType.MouseDown : 左クリック

• ドラッグは自分で状態を持つよう実装する• MouseDownしたときドラッグ開始

• MouseUpしたときドラッグ終了13年1月20日日曜日

Page 26: Asset Storeに出すためのEditor開発入門

コード例 private void OnGUI() { Event e = Event.current;

EventType type = e.type; KeyCode keyCode = e.keyCode; Vector2 position = Event.current.mousePosition;

switch (e.type) { case EventType.MouseUp: /* マウス入力処理 */

break; case EventType.KeyDown: if(keyCode == ‘A’) { /* キー入力処理 */ }

break; ... 略 } }

13年1月20日日曜日

Page 27: Asset Storeに出すためのEditor開発入門

3. データの持ち方

13年1月20日日曜日

Page 28: Asset Storeに出すためのEditor開発入門

SimpleDataのデータ

• スクリプトでシリアライズされるデータを設計情報として使用する

• 描画されている矩形/矢印/文字はすべてこの情報を使用する

• #ifdefを使って設計情報はゲーム内に持ち込まないようにする(矩形の座標など)

13年1月20日日曜日

Page 29: Asset Storeに出すためのEditor開発入門

シリアライズとは• シリアライズ = 永続化(データが保存される)

• UnityのInspector上で編集出来る値は、すべてシリアライズ可能な値

• Sceneに追加されたGameObjectの値は.sceneファイルに、Prefabの値は対応する.prefabファイルに保存される

13年1月20日日曜日

Page 30: Asset Storeに出すためのEditor開発入門

シリアライズする• シリアライズする2種類の方法

1. MonoBehaviourを継承したクラスで、public変数を追加する

2. 通常のクラスに[System.Serializable]属性追加し、public変数を追加する

• SimpleDataでは、上記の2の方法を使って必要な情報が1つのPrefabに収まるようにした

13年1月20日日曜日

Page 31: Asset Storeに出すためのEditor開発入門

コード例

using UnityEngine;using System.Collections; [System.Serializable]public class Fuga { public int aaa; public string bbb; public float ccc;}

13年1月20日日曜日

Page 32: Asset Storeに出すためのEditor開発入門

4. 矩形と線の描画

13年1月20日日曜日

Page 33: Asset Storeに出すためのEditor開発入門

矩形の描画

• OnGUI()でGUI.Box (new Rect(0, 0, 100, 100), " ");

• この背景に使われている矩形を描画する

• 背景色を変更する場合、GUI.Boxを実行する前にGUI.colorの値を変更する

GUI.color = white

13年1月20日日曜日

Page 34: Asset Storeに出すためのEditor開発入門

テクスチャの張り方• OnGUI()内で

GUI.DrawTexture (new Rect (0, 0, 16, 16), texTriangle);

• SimpleDataの各種UIもこのDrawTextureを使用している

13年1月20日日曜日

Page 35: Asset Storeに出すためのEditor開発入門

線の描画• 実は線の描画もテクスチャの描画

• GUI.DrawLineは無い

• 一本線を引いたテクスチャを回転させ、座標を計算して引き延ばす

• 矢印は矩形との交点を計算して、回転させて適切な位置に描画

13年1月20日日曜日

Page 36: Asset Storeに出すためのEditor開発入門

5. AssetStoreの出し方

13年1月20日日曜日

Page 38: Asset Storeに出すためのEditor開発入門

Assetに関連する項目(1)

• Assetのセットアップが必要な場合、明確にドキュメント化して、ユーザーをサポートすること

• デモ用のビデオや、WebPlayerのデモを用意しよう

• Assetの名前は分かりやすく(ex. ただのSpaceshipではなく、Deep Space Cargo Spaceshipなど)

• パッケージに.txt等でドキュメントを含め、デモ用のシーンを用意すること

• ユーザーのゲームで使われるコードの場合、正しく例外処理をすること(※何が正しいのかというガイドラインは無い)

• あなたのAssetがエラーを出すと、ユーザーのエラーと警告が埋もれてしまう

13年1月20日日曜日

Page 39: Asset Storeに出すためのEditor開発入門

Assetに関連する項目(2)

• 通常のUI標準に従う必要があり、反直感的なUIは避ける(ドキュメントを見なくても使えるようにすべき)

• すべてのEditorはUndoできるように実装する

• トップメニューに企業名のメニューを表示させてはいけない

• 代わりにEdit, Window, Component, GameObjectメニューの中に追加する

13年1月20日日曜日

Page 40: Asset Storeに出すためのEditor開発入門

価格のガイドライン

13年1月20日日曜日

Page 41: Asset Storeに出すためのEditor開発入門

Asset Storeの申請

• Asset StoreからAsset

Store ToolsをDL

• Asset Storeに掲載する情報の記載+ロゴ画像等を登録してSubmit

• 審査に通ればAsset

Storeに出る(らしい)

13年1月20日日曜日