Upload
kouhei-mikami
View
11.001
Download
4
Embed Size (px)
DESCRIPTION
さいたま開発勉強会 vol.6の発表資料です
Citation preview
Asset Storeに出す為のEditor開発入門
さいたま開発勉強会 vol6
三上 浩平
13年1月20日日曜日
自己紹介
• 三上 浩平(@mi_kami)
• 自分のWebサイト: http://mkgames.me
• 会社ではeclipseプラグインの開発をしています
• 家でUnity使ってゲームを作っています
13年1月20日日曜日
THE 破壊(Break it!)
• 1週間で作ったUnityのゲーム(iOS/Android)
13年1月20日日曜日
SimpleData• C82で頒布したUnityのAsset
• Unity版Core Dataみたいなもの
13年1月20日日曜日
ateliate• 電子書籍が作れるかもしれないMacアプリ
• C78で頒布 → ねじさん買いにきた!!!
13年1月20日日曜日
ギークハウス武蔵小杉• 神奈川県川崎市にあるシェアハウス• 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日日曜日
UnityのEditorを作ろう
13年1月20日日曜日
なんで?• ゲーム開発にはツールがたくさん必要!• 例: (ソーシャルでない)カードゲーム作るとき
• カードのバランスを編集する為のエディタ(プログラマでなくても編集できるように)
• ゲームのルールを変更する為のエディタ• 規模が大きくなると、作りたいゲームに合わせて自身でツールも開発する必要がある
13年1月20日日曜日
Unityのツールを作る利点
• カードのバランスを編集するなら、ExcelやXMLを編集してインポートでは駄目?
• 別にUnityでツール作らなくても好きな環境で作るし...。
• Unityでツールを作るとAsset Storeに出せる!!(利点)
13年1月20日日曜日
AssetStoreとは
• ユーザーが3Dモデルやツールを購入する為のストア
• 購入するだけでなく、販売することも可能
• 無料~$100以上するものまで様々
13年1月20日日曜日
Assetが作れると...
• ゲームを作ってて、何かに困ったのでツール(Asset)を作った
• 自分が困った = 他にも困ってる人がいる
• ゲームを作るついでに作ったツールをAsset Storeに出して、それを売れる!!
• 自分が何に困っていて、他の人をどう便利にできるか考えよう
13年1月20日日曜日
例1: NGUI
• UIを作成する為のAsset
• Unityでゲームを作ったがまったくヒットせず、このAssetだけが大ヒット
• フレームワークが良く考えられている
• EditorとInspectorの拡張
13年1月20日日曜日
例2: CutScene
• よくある3Dのムービーシーンを作る為のAsset
• ゴリゴリ矩形を描画してFlashのタイムラインのようなものを実装している
13年1月20日日曜日
Assetを作りましょう
13年1月20日日曜日
Editorを作ろう• Editorとは、何かを編集するための領域(Window)
• この領域に対して、ユーザーは自由にGUIパーツを配置したり描画できる
• Editor以外にも、InspectorやSceneビューを拡張できる
• これら全てをまとめてパッケージングしたものをAsset Storeで公開
Editor
Scene
Inspector
13年1月20日日曜日
目次1. Editorの作り方の基本
2. キーボード入力とマウス入力
3. データの持ち方
4. 矩形と線の描画
5. AssetStoreの出し方
13年1月20日日曜日
1. Editorの作り方の基本
13年1月20日日曜日
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日日曜日
メニューへの登録
• 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日日曜日
処理の記述• public void OnSelectionChange()
• ProjectビューやHierarchyビューで要素が選択された時に呼ばれる
• public void OnGUI()
• 描画のタイミングで呼ばれる• ユーザからの入力/各種描画処理
• EditorWindowを継承した抽象クラスを作り、OnGUIの処理を分割すると良い
13年1月20日日曜日
GUIを配置する方法• GUIを配置する為の3つの方法
• GUI : 好きな座標に、好きな大きさで配置
• GUILayout : 自動でレイアウト
• GUIEditorLayout : Editor用のラベルとセットになったUI
GUILayout GUI13年1月20日日曜日
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日日曜日
2. キーボードとマウス入力
13年1月20日日曜日
キー入力の実装• ショートカット等を作るだけでEditorがより使いやすくなる
• 簡単そうに見えるものでも、キー入力の処理は意外と難しい(Projectビューとか)
• OnGUI()でキー入力イベントを処理する
• Event.current.keyCodeで入力されたキーを取得
13年1月20日日曜日
マウス入力の実装• OnGUI()でマウスイベントを処理する
• Event.current.mousePositionで座標を取得
• Event.current.typeでイベントの種類を取得
• EventType.ContextClick : 右クリック
• EventType.MouseDown : 左クリック
• ドラッグは自分で状態を持つよう実装する• MouseDownしたときドラッグ開始
• MouseUpしたときドラッグ終了13年1月20日日曜日
コード例 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日日曜日
3. データの持ち方
13年1月20日日曜日
SimpleDataのデータ
• スクリプトでシリアライズされるデータを設計情報として使用する
• 描画されている矩形/矢印/文字はすべてこの情報を使用する
• #ifdefを使って設計情報はゲーム内に持ち込まないようにする(矩形の座標など)
13年1月20日日曜日
シリアライズとは• シリアライズ = 永続化(データが保存される)
• UnityのInspector上で編集出来る値は、すべてシリアライズ可能な値
• Sceneに追加されたGameObjectの値は.sceneファイルに、Prefabの値は対応する.prefabファイルに保存される
13年1月20日日曜日
シリアライズする• シリアライズする2種類の方法
1. MonoBehaviourを継承したクラスで、public変数を追加する
2. 通常のクラスに[System.Serializable]属性追加し、public変数を追加する
• SimpleDataでは、上記の2の方法を使って必要な情報が1つのPrefabに収まるようにした
13年1月20日日曜日
コード例
using UnityEngine;using System.Collections; [System.Serializable]public class Fuga { public int aaa; public string bbb; public float ccc;}
13年1月20日日曜日
4. 矩形と線の描画
13年1月20日日曜日
矩形の描画
• OnGUI()でGUI.Box (new Rect(0, 0, 100, 100), " ");
• この背景に使われている矩形を描画する
• 背景色を変更する場合、GUI.Boxを実行する前にGUI.colorの値を変更する
GUI.color = white
13年1月20日日曜日
テクスチャの張り方• OnGUI()内で
GUI.DrawTexture (new Rect (0, 0, 16, 16), texTriangle);
• SimpleDataの各種UIもこのDrawTextureを使用している
13年1月20日日曜日
線の描画• 実は線の描画もテクスチャの描画
• GUI.DrawLineは無い
• 一本線を引いたテクスチャを回転させ、座標を計算して引き延ばす
• 矢印は矩形との交点を計算して、回転させて適切な位置に描画
13年1月20日日曜日
5. AssetStoreの出し方
13年1月20日日曜日
Asset Store Guidline
• Asset Storeに出すときの注意点がまとめられた(味気ない)文書
• http://unity3d.com/asset-store/docs/submission-guidelines.html
• 出す前にはよく読もう
13年1月20日日曜日
Assetに関連する項目(1)
• Assetのセットアップが必要な場合、明確にドキュメント化して、ユーザーをサポートすること
• デモ用のビデオや、WebPlayerのデモを用意しよう
• Assetの名前は分かりやすく(ex. ただのSpaceshipではなく、Deep Space Cargo Spaceshipなど)
• パッケージに.txt等でドキュメントを含め、デモ用のシーンを用意すること
• ユーザーのゲームで使われるコードの場合、正しく例外処理をすること(※何が正しいのかというガイドラインは無い)
• あなたのAssetがエラーを出すと、ユーザーのエラーと警告が埋もれてしまう
13年1月20日日曜日
Assetに関連する項目(2)
• 通常のUI標準に従う必要があり、反直感的なUIは避ける(ドキュメントを見なくても使えるようにすべき)
• すべてのEditorはUndoできるように実装する
• トップメニューに企業名のメニューを表示させてはいけない
• 代わりにEdit, Window, Component, GameObjectメニューの中に追加する
13年1月20日日曜日
価格のガイドライン
13年1月20日日曜日
Asset Storeの申請
• Asset StoreからAsset
Store ToolsをDL
• Asset Storeに掲載する情報の記載+ロゴ画像等を登録してSubmit
• 審査に通ればAsset
Storeに出る(らしい)
13年1月20日日曜日