SlideShare a Scribd company logo
1 of 105
Download to read offline
エディター拡張マニアクス2018
ユニティ・テクノロジーズ・ジャパン合同会社
安藤 圭吾
2018/05/07 - 09
あんどう けいご
ユニティ・テクノロジーズ・ジャパン合同会社 / フィールドエンジニア
入門書を書いてました
公開して3年経ちました。Web版無償公開中!
様々な言語で公開されています

・日本語 (公式)
・英語 (Google Translate)
・中国語 (ボランティア)
・韓国語 (ボランティア)


翻訳中らしい!
・ポーランド語
http://anchan828.github.io/editor-manual/
本講演について
• ここ3年間の間に実装された機能について話します。

• 質問時間は取れないかもしれません。その場合、講演後の質問ブースやUnityブース、
メール、Twitterなどで質問してください。
Scripted Importer
ファイルとアセットの関係性
ファイル アセット
インポート
Unityで扱いやすいアセットに
加工された
扱いやすいものに加工
未対応のファイルを扱うとき
Prefab / ScriptableObject
扱いやすいものに加工
ファイル 意味を持たないアセット
インポート
Scripted Importer で未対応ファイルに対応する
ファイル アセットPrefab / ScriptableObject
インポート
インポーターを定義する
[ScriptedImporter(1, "cube")]
public class CubeImporter : ScriptedImporter
{
public override void OnImportAsset(AssetImportContext ctx)
{
// ctx にファイルの情報が格納されている
}
}
• ScriptedImporterを継承したクラスを作成する
• ScriptedImporterAttributeで対応する拡張子を登録する
OnImportAssetで行う処理
• メインアセット(とサブアセット)を定義する
public override void OnImportAsset(AssetImportContext ctx)
{
var cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
// 最初に追加したものがメインアセットとなる
ctx.AddObjectToAsset(”MainAsset", cube);
// サブアセットとしてマテリアルを追加
var material = new Material(Shader.Find("Standard"));
ctx.AddObjectToAsset("SubAsset", material);
// もし特定のオブジェクトをメインにしたい場合は呼び出す
// ctx.SetMainObject(material);
}
アセットID
インポーター設定の表示
• インポーター設定はメインアセットのインスペクターで確認することができる
インポーター設定
メインアセットの情報
インポーター設定のプロパティーを追加する
[ScriptedImporter(1, "cube")]
public class CubeImporter : ScriptedImporter
{
public float m_Scale = 1;
}
• ScriptedImporterクラスにシリアライズ可能なフィールドを追加するだけでOK
表示させたくないプロパティーがある
CustomEditorの作成
[CustomEditor(typeof(CubeImporter))]
public class CubeImporterEditor : ScriptedImporterEditor
{
public override void OnInspectorGUI()
{
// ここでプロパティーを表示するためのGUIを実装
        this.ApplyRevertGUI();
}
}
ScriptedImporterEditor は Editor クラスを継承したもの
• ApplyRevertGUIを呼び出すだけで必要
な処理は行われる
• Applyボタンを押すとOnImportAssetが
実行される
アセットIDは変更しないこと
ctx.AddObjectToAsset(”SubAsset", material);
アセットID
fileFormatVersion: 2
guid: 7e4b97b7e2d924208879257b687c6928
ScriptedImporter:
fileIDToRecycleName:
100002: MainAsset/Cube
400002: MainAsset/Cube/Transform
2100000: SubAsset
2300002: MainAsset/Cube/MeshRenderer
3300002: MainAsset/Cube/MeshFilter
6500002: MainAsset/Cube/BoxCollider
100100002: MainAsset
オブジェクトごとにアセットIDが存在し、metaデータでは fileID として扱われる
では、アセットIDを変更するとどうなる?
アセットIDを変更するとどうなるか
なぜマテリアルの参照が外れたのか
ScriptedImporter:
fileIDToRecycleName:
100002: MainAsset/Cube
400002: MainAsset/Cube/Transform
2100000: SubAsset
ScriptedImporter:
fileIDToRecycleName:
100002: MainAsset/Cube
400002: MainAsset/Cube/Transform
2100002: SubAsset2
アセットIDを変更したことにより fileID の数値も変わった (2100000 -> 2100002)
m_Materials:
- {fileID: 2100000, guid: 7e4b97b7e2d924208879257b687c6928, type: 3}
スフィアのmetaデータをみると、参照しているマテリアルの fileID は変わっていない
Unityがサポート済みの拡張子に対しては使用できない
たとえば json ファイルに対するインポーターを作成した場合…
すでにUnityで対応済みだからインポーターは実装できないとエラーが出る
中身は json でも、独自の拡張子で対応する必要性が出てくる
すでにいくつかのインポーターが実装されている
• UI Elements(UXML / USS)
• Shader Graph
• AlembicImporter
• USDImporter
UI Elements
UnityエディターはIMGUIで構築されている
ラベル、ボタン、スライダー…はすべてIMGUI
UIが複雑になるほど増えていくコード量
var labelRect = new Rect(0, 0, 100, 50);
var largeFontStyle = new GUIStyle(EditorStyles.label);
largeFontStyle.fontSize = 20;
EditorGUI.LabelField(labelRect, "ラベル", largeFontStyle);
var buttonRect = new Rect(0, labelRect.height, 100, 50);
if (GUI.Button(buttonRect, "ボタン"))
{
}
大きめのラベルとボタンを追加するだけでもこのコード量
1ヶ所にまとめられてしまうイベントリスナー
private void HandleEvents()
{
switch (Event.current.type)
{
case EventType.MouseDown:
OnMouseDown();
break;
case EventType.MouseUp:
OnMouseUp();
break;
case EventType.ContextClick:
OnContextClick();
break;
}
}
IMGUIではそろそろ限界?
Unityでできることが増え、UIも複雑になってきた。
メンテナンス性や生産性、拡張性などあらゆる面で影響が出始めた。
RMGUIであるUIElementsの開発を決意
UI Elementsの現状
• UI Elements はまだ internal customer (Unity社員)向けの機能
• 「Shader Graph」のようなUnity公式プロジェクトで多くのフィードバックを集め
ている最中
UI Elementsの概要
UI ElementsはWebの知識があれば理解するのは楽
基本的にはこの4つを覚えればよく、Webの知識に当てはめることができる
Visual Tree DOM (HTMLをプログラムで操作する仕組み)
UXML HTML
USS CSS
UQuery Query Selector JQueryもどき
Visual Tree(ビジュアルツリー)
ビジュアルツリーは、Visual Element(ビジュアルエレメント)と呼ばれるノードから
成るグラフです。
Visual Element
Visual Element
Visual Element
Visual Element
<body>
<h1>タイトル</h1>
<div>
<div>テキスト</div>
</div>
</body>
XML や HTML の事だと思ってください
UXML
ビジュアルツリーの構造をテキスト化し、ファイルとして扱うようにしたもの
<UXML xmlns:ui="UnityEngine.Experimental.UIElements">
<ui:Label text="Select something to remove from your suitcase:"/>
<ui:Box>
<ui:Toggle name="boots" label="Boots" value="false" />
<ui:Toggle name="helmet" label="Helmet" value="false" />
<ui:Toggle name="cloak" label="Cloak of invisibility" value="false"/>
</ui:Box>
<ui:Box>
<ui:Button name="cancel" text="Cancel" />
<ui:Button name="ok" text="OK" />
</ui:Box>
</UXML>
XML や HTML ファイルの事だと思ってください
USS
Visual Elementのスタイルをセレクターで指定するためのもの
.header {
font-size: 20px;
}
Button {
width:200px;
}
CSS の事だと思ってください
<UXML xmlns:ui="UnityEngine.Experimental.UIElements">
<ui:Label class=“header" text="Text"/>
<ui:Button name="ok" text="OK" />
</UXML>
UQuery
Visual Element をセレクターで取得するためのもの
// 最初にヒットした hoge クラスを持つボタンを取得
root.Query<Button>(“.hoge”).First();
// hogeクラスを持つ要素配下にあるすべてのボタンを取得
root.Query(“.hoge”).Children<Button>();
document.querySelector やJQueryの事だと思ってください
UI Elementsを使ってGUIを描画してみる
Visual Container(ビジュアルコンテナ)
ビジュアルコンテナは、ビジュアルツリーを格納する領域です。
RMGUI でいう OnGUI みたいなもの
OnGUI コンテナ
void OnGUI()
{
var position = new Rect(0,0, 100, 50);
EditorGUI.LabelField(position, “ラベル");
}
Visual Container(ビジュアルコンテナ)
EditorWindowにOnGUIでラベルを描画する場合
Visual Container(ビジュアルコンテナ)
UIElementsでラベルを描画する場合(その1)
void OnEnable()
{
var label = new Label(“ラベル”);
var container = this.GetRootVisualContainer();
container.Add(label);
}
Visual Container(ビジュアルコンテナ)
UIElementsでラベルを描画する場合(その2)
<UXML xmlns:ui="UnityEngine.Experimental.UIElements">
<ui:Label text="ラベル"/>
</UXML>
var template = AssetDatabase
           .LoadAssetAtPath<VisualTreeAsset>(“Assets/SimpleUXML.uxml");
var container = this.GetRootVisualContainer();
template.CloneTree(container, null);
container.AddStyleSheetPath(“Assets/SimpleUSS.uss");
UXMLアセットの生成
プレビューでVisual Elementsを確認できるCreateメニューから生成できる
UI Elementsの今後
• UI Elements はまだ EditorWindow のみサポート
• 2018.3 以降でインスペクターウィンドウのサポートを行う予定
• だが、いろいろ課題が多い
• CustomEditor(PreviewGUI含む)
• PropertyDrawer
• パフォーマンス
• 2018.xでは IMGUI にある機能を UIElements に実装する期間です。
• 個人的には、ユーザーがまともに使えるようになるのは 2019.x 後半だと思うのでもう
少し待っててください
Graph View
Graph Viewの現状
• 多くの人が期待している機能だと思う!
• Graph View もまだ internal customer (Unity社員)向けの機能
• 「Shader Graph」のようなUnity公式のビジュアルエディターで多くのフィード
バックを集めている最中
• みなさんに見せられるものはShader Graphのソースコードくらい
• 今後、大きくAPIが変わっていくと思う
• ちなみに GUI はすべて UI Elements で実装されています。
• まだドキュメントもないのでこの段階で触るのはオススメしないです
• 触れる段階になったら情報を公開していくので待っててください。
Shortcut System
Shift + A というショートカットコマンドを実装するには(その1)
void OnGUI()
{
var e = Event.current;
switch (e.type)
{
case EventType.MouseDown:
if (e.shift && e.keyCode == KeyCode.A)
{
// 何か処理
e.Use(); // 最後にEventTypeをUsedに変更
}
break;
case EventType.MouseUp:
… 略 …
}
}
• 特定のEditorWindowでショートカットを実装するとき
• Eventからショートカットコマンドを検出する
Shift + A というショートカットコマンドを実装するには(その2)
[MenuItem("UniteTokyo2018/ショートカットを実装 #a")]
static void ExecShortcutCommand()
{
}
• MenuItemで実装する時
• グローバルなショートカットコマンドを実装できる
難易度の高いショートカット機能の実装
• Eventクラスを駆使して実装するため、難易度が高かった
• OS によるキーの違いも考慮しなければいけない

• ショートカットキーがコンフリクトしても、それを知るすべがない

• ショートカットのキーをユーザーで変更できない!

• 唯一、キーを変更できる Preferences -> Keys のショートカット機能も独立した機能
• 実装方法が統一されていないため、ショートカットのリスト化が困難だった
新しいショートカットシステム
• 2018.2から新しいショートカットシステムを実装
• まだプレビュー段階
• privateな機能。いずれ public にしてユーザーも実装できるようにする予定
• できるようになること
• ショートカットのリスト化(1画面ですべてのショートカットが見れるように)
• ユーザーによるショートカットキーの変更
• ショートカットキーがコンフリクトした場合の修正・解決
ショートカットの実装方法
• MenuItemのような実装方法
[Shortcut("MyWindow / MyAction", typeof(MyWindow), "%F")]
static void ActionName(ShortcutArguments args)
{
Debug.Log("ショートカットを実行");
}
• ShortcutAttirbuteを使用する
• 特定のEditorWindowに対するショートカットの場合は第2引数にTypeを指定
• globalで動作させたい場合はnullを指定
• ショートカットキーのフォーマットはMenuItemと同じ
まだまだ課題はたくさん
• 現状サポートしているのはグローバルかEditorWindowのみ
• テキストフィールドなどの IMGUI / UIElements に対するショートカットはどうする?
• ショートカットキーのコンフリクトは検出できるけど、どうやってユーザーに解決させ
よう?
• ユーザーは多くのアセットをアセットストアから入手する。

そのぶん、コンフリクトする確率も高くなり、コンフリクトを解決させる頻度が多く
なってしまうかもしれない。
• もっとスマートに解決させる方法はないか?
Presets
昔からある Preset Library
• カラーパレットや、アニメーションカーブを保存する機能
• 今回紹介するのは、これとは別物です。
Presets
Presetオブジェクトに UnityEngine.Object のプロパティーを保存/復元する機能
Presetアセットができる保存ボタンをクリック
各コンポーネントにあるPresetボタン
Presets
Presetアセットには SerializedPropertyで取得できる値が保存されている
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!181963792 &2655988077585873504
Preset:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_Name: Camera
m_TargetType:
m_NativeTypeID: 20
m_ManagedTypePPtr: {fileID: 0}
m_ManagedTypeFallback:
m_Properties:
- target: {fileID: 0}
propertyPath: m_Enabled
value: 1
objectReference: {fileID: 0}
- target: {fileID: 0}
propertyPath: m_ClearFlags
value: 1
objectReference: {fileID: 0}
- target: {fileID: 0}
propertyPath: m_BackGroundColor.r
value: 0.19215687
objectReference: {fileID: 0}
SerializedPropertyを

保持していると思えばOK
Presetアセットをスクリプトで操作することが可能
// source の SerializedPropertyの値をコピー
Preset preset = new Preset(source);
// preset をアセットとして保存。拡張子は .preset
AssetDatabase.CreateAsset(preset, "Assets/" + name + “.preset");
// targetにコピーした SerializedPropertyの値を流し込む
preset.ApplyTo(target);
Presetセレクターをスクリプトで呼び出すことも可能
transform = (Transform) EditorGUILayout.ObjectField(transform, typeof(Transform), true);
if (transform && GUILayout.Button("Open Preset Selector"))
{
PresetSelector.ShowSelector(
        new Object[] { transform }, null, true);
}
Presetでデフォルト値を定義できる
• Presetに保存した値をデフォルト値として扱
うことが可能
• Presetアセットのインスペクターにある
「Set as ... Default」ボタンをクリックする
ことで有効化
• 新規でオブジェクトを生成するときに、自動
でPresetの値が使用される
Presetで一番役に立つのがインポーター設定
• Presetは UnityEngine.Object に対する値を保存するのでコンポーネントだけではなく、
インポート設定にも対応できる
• インポート設定の値はエディター拡張でコードを書かない限り、変更することができな
かった。
• Presetにより、コードを書かずにデフォルト値として値を設定できるようになった
Package Manager
Package Manager とは
• アセットを配信するシステム
新機能を

いち早く届ける
共通の機能を

楽に共有する
オープンな環境で
Unityをより使いやすく
Module Manager との違い
• Module Managerは Unity 4.x 時代から実装されているシステム
• コンセプトは Package Manager と同じ(Unityバージョンに影響せずいち早く届ける)
• チョット失敗
• 扱うモジュールが core 部分に強く依存していて切り離しが難しかった
• それにより、モジュールをアップデートするときにはUnityのバージョンも上げ
なければいけないという本末転倒な感じに

• 最終的には Module Manager はなくなり、Package Managerに統合される
Package Managerの基盤システムはnpm
• パッケージマネージャーはNode.jsのnpmを使用している
• よってパッケージの情報は、package.json で管理する
{
"name": "com.unity.package-4",
"displayName": "Package Number 4",
"version": "2.5.1",
"unity": "2018.1",
"description": "This package provides X, Y, and Z.",
"keywords": ["key X", "key Y", "key Z"],
"category": "Controllers",
"dependencies": {
"com.unity.package-1": "1.0.0",
"com.unity.package-2": "2.0.0",
"com.unity.package-3": "3.0.0"
}
}
パッケージの構成
• README や LICENSE などおなじみの
ファイル構成
• Editor / Runtime / Tests / Samples /
Documentation という特殊なフォルダ
を持つ
• アセットの扱いは普段と変わらない
• パッケージ公開後はread-onlyになる
<root>
├── package.json
├── README.md
├── CHANGELOG.md
├── LICENSE.md
├── QAReport.md
├── Editor
│ ├── Unity.[YourPackageName].Editor.asmdef
│ └── EditorExample.cs
├── Runtime
│ ├── Unity.[YourPackageName].asmdef
│ └── RuntimeExample.cs
├── Tests
│ ├── Editor
│ │ ├── Unity.[YourPackageName].Editor.Tests.asmdef
│ │ └── EditorExampleTest.cs
│ └── Runtime
│ ├── Unity.[YourPackageName].Tests.asmdef
│ └── RuntimeExampleTest.cs
├── Samples
│ └── SampleExample.cs
└── Documentation
├── your-package-name.md
└── Images
asmdefファイル
• スクリプトは アセンブリ定義ファイル
を使って管理すること
プロジェクト単位で manifest.json を持つ
• プロジェクト単位で依存するパッケージを指定することができる
• グローバルではUnity公式が持つレジストリを参照するが manifest.json では特定のレ
ジストリURLを指定できる
{
"registry": "https://staging-packages.unity.com",
"dependencies": {
"com.unity.package-manager-ui": "1.3.0"
}
}
レジストリ
• 基本はUnity公式が提供するレジストリ
• Asset Store も対応予定
• ユーザーがサーバーを立てプライベートレジスト
リを使用することも可能 - (時期は未定)
• Git やホスティングサービス、Unityコラボレート
を指定できるように - (時期は未定)
Package Managerの今後
• アセットストアに対応することでより身近な機能となります
• unitypackage は過去のフォーマットとなる
• つまり、zipファイルでやり取りする方法は非推奨になる
パッケージマネージャーのドキュメントはこちら
Unity C# Reference
標準機能の技術をエディター拡張で使いたい
どうやってズーム機能を実装しているの?
ズーム機能
あのプロパティーにアクセスしたい
プロパティー名はなんだろう?
情報が足りないことがよくある
• ドキュメント化されていない
• APIが公開されていない
意図的に公開していない可能性もある
DLLをデコンパイルしてコードを見る必要性が出てくる
それでも、どうにかしたい場合は…
デコンパイルするのはダメか?
• 公式から「ダメ」とは言わないがOKとも言えない
• 必要になった人が自己責任でやる分には黙認していた
• デコンパイルツールはたくさんあるしその行為を防ぐことは難しい
• 現実、多くの人がデコンパイルを行ってより高度なエディター拡張の開発を行っていた
• しまいにはGithubに上がっちゃうほど
• むしろ、エディター拡張においては積極的にデコンパイルしてコードを見ていくべき
• 「コードの設計」「命名規則」は参考になる
• 「この機能はどうやって動いているんだ?」という疑問を解決し、学ぶべき
デコンパイルするのはダメか?
エディター標準の機能もAPIを使って実装されている
どのような機能があるかを把握できる。また、参考にして似た機能が作れる。
お作法をUnityに合わせたいという人向け
公式で C# のソースコードを公開
• デコンパイルしたものよりも正しいコードを読ん
でもらう。
• Unity のソースコードは大きく分けて C++ と C#
の2種類
• そのうち C# の部分をUnity Reference-Only
Licenseの元、公開
• 現在、2017.1 ~ 2018.2 まで公開
UnityCsReference
Unity Reference-Only License とは
参照専用であること
複製は可能 再配布・改変は不可
Clone
コピペはダメ
UnityCsReference を有効活用して
エディター拡張を学ぶ
まずはUnityCSReferenceをクローンする
Clone
① PCにクローンする ② IDEでプロジェクトを開く
Projects/CSharp/UnityReferenceSource.sln
下準備が完了
自分にとっての面白機能を探してみる
「プロジェクトブラウザのように領域を変更する機能ってどうやって実現するんだろう」
目的のコードを探す(※慣れが必要)
① 検索機能で目的のコードをみつける ② それっぽい所に目星をつける
EditorGUIUtility.DrawHorizontalSplitter 

が怪しいぞ、中身を見てみよう
ProjectBrowser.cs
どのように実装されているか学ぶ
細かく分解していき、理解する
どのように実装されているか学ぶ
Repaint以外では
描画しないようにするのか
Splitterの描画方法を知る
どのように実装されているか学ぶ
GUIの色を変えて、最後に元に戻す。そのために元の色
をキャッシュしておく
Splitterの描画方法を知る
どのように実装されているか学ぶ
なんと!あの線はテクスチャだったのか!
そして、GUI.colorでテクスチャの色も変わるのか!
Splitterの描画方法を知る
どのように実装されているか学ぶ
Splitterの描画方法は「テクスチャ使って描画する」ということがわかった
ではSplitterをマウスでドラッグして領域サイズを変更する方法は…
• ページ内検索でdragで検索してみると
引っかかる
• HandleHorizontalSplitterといかにも
な名前がある
という感じで繰り返し調べていく
Unityのソースコードは宝の山
• エディター拡張は公式でも同じ技術を使っているので、コードを眺めるだけでも
学べることはいっぱいある
• 「この標準機能はどうやって実装されているんだろう」と興味を持ち、調べるこ
とがエディター拡張のスキルを磨く近道
Thank you!
ご静聴ありがとうございました
おまけ
Tree View
TreeViewの表示方法は2種類
ヒエラルキーのような表示 テーブルのような表示
TreeViewの構造
TreeViewItem
TreeViewItem
TreeViewItem
TreeViewItem
Root
• TreeViewItemをツリー状に持つ
• 必ずルートとなるTreeViewItemを持つ
Hierarchyウィンドウのようなビューを作成してみる
public class HierarchyView : TreeView
{
public HierarchyView(TreeViewState state) : base(state)
{
}
protected override TreeViewItem BuildRoot()
{
}
}
• TreeView を継承したクラスを作成する
• BuildRootメソッド内で TreeViewItemのセットアップを行う
TreeViewItemの構築
protected override TreeViewItem BuildRoot()
{
// Root の depth は -1
var root = new TreeViewItem { id = 0, depth = -1 };
    // AddChild メソッド、または children プロパティで開閉で表示可能な子要素を追加
root.AddChild(
new TreeViewItem
{
id = 1,
depth = 0,
displayName = "Animals",
children = new List<TreeViewItem> {
new TreeViewItem {id = 2, depth = 1, displayName = "Mammals"},
}
}
);
return root;
}
TreeViewの描画
private HierarchyView hierarchyView;
// スクリプトをコンパイルしてもステートが維持できるように
[SerializeField]
private TreeViewState state;
void OnEnable()
{
// 開閉状態や、どのTreeViewItemを
// 選択しているかなどの状態が格納されるstateオブジェクト
if (state == null)
{
state = new TreeViewState();
}
hierarchyView = new HierarchyView(state);
    // 初期化のために呼び出す
hierarchyView.Reload();
}
void OnGUI()
{
hierarchyView.OnGUI(new Rect(Vector2.zero,
position.size));
}
• EditorWindowでTreeViewを描画する
MultiColumnHeader
• TreeViewにカラムを設けて、テーブルのように扱うことができる
• ヘッダーの状態によって表示するTreeViewItemを制御することができる
• ソート
• 検索
• カラムの表示/非表示
• カラムの表示幅
TreeViewItemが大量でもサクサク
• 必要な要素のみを描画するため、要素が5000あってもカクつくことなくサクサク表示できる
描画しない
描画しない
MultiColumnHeaderは少し複雑
• 学ぶことが多く、実装するには少し難易度が高い
• マニュアルやサンプルプロジェクト(その1、その2)を参考に学んでください
texture-tree-view-sample コメントも細かく追加していきます
Session State
4つ目のデータを保持する方法
保存するデータの種類に合わせ、使い分ける
EditorPrefs
Unityのバージョンやプロジェクト関係なく

グローバルで保持される
EditorUserSettings

.SetConfigValue
Library/EditorUserSettings.asset
に保持される
ScriptableObject アセットとして保持される
SessionState エディターを起動している間のみ保持される
値をファイルに書き込む必要がないものに適している
• パスワード/トークンのような個人情報
• スクリプトのコンパイルをまたいで保持したいもの
• 現在選択しているタブ
• Hierarchyでの開閉状態
• 最後に選択したオブジェクト
• 等々…
• あまりピンとこない人はUnityCsReferenceで「SessionState」と検索して使用例をみ
るといいかもしれない…
Build Report
ビルド情報の詳細データを所得できるようになりました
• 今までは Editor.log などを解析してデータを取得しなければいけなかった
• BuildPipeline.BuildPlayer の戻り値として取得できる
• PostProcessBuildの引数として取得できる
public void OnPostprocessBuild(BuildReport report)
{
foreach (var step in report.steps)
{
foreach (var message in step.messages)
{
// スクリプトが Missing などの警告メッセージも取得できる
Debug.Log(message.content);
}
}
}
BuildReportで取得できるデータ
• ビルド中に発生したログ
• 成果物に含まれているファイル(保存先 / ファイルサイズ / アセットの種類)
• ビルド前のようなアセット単位ではなくsharedassets0.assets というような、

複数のファイルがまとめられた状態
• ビルド結果(かかった時間、成果物のトータルサイズ、保存先…)
レポートツールを作成するときに便利
CIツール
Pre Process Build
面倒だったビルド直前に処理したいもの
• Unity 5.x 時代は、ビルド後に実行されるPostProcessBuildしかなかった
• もし、ビルド前に処理したいことがある場合 BuildPipeline.BuildPlayer を使って自分
で Build 機能を実装しなければいけなかった
[MenuItem("UniteTokyo2018/BuildPlayer")]
static void ExecBuildPlayer()
{
// ビルド前に処理したいことをする
BuildPipeline.BuildPlayer(
EditorBuildSettings.scenes,
"保存先",
BuildTarget.StandaloneOSX,
BuildOptions.None);
}
Build Settings ウィンドウ
のビルドボタン封印
ビルド直前に実行されるメソッド
• IPreprocessBuildWithReport を継承したクラスを作り OnPreprocessBuild メソッドを
追加することでビルド前に実行されるメソッドを実装できる
public class PreProcessBuildSample : IPreprocessBuildWithReport
{
// 実行される順番を指定できる
public int callbackOrder { get { return 0; } }
public void OnPreprocessBuild(BuildReport report)
{
}
}
ビルドターゲットや保存先などビルドに
必要な情報が格納されている
用途や注意点
• 主に使われそうな例
• ビルドターゲットに合わせてリソースの変更を行う
• ResourcesフォルダやStreamingAssetsフォルダの中身を変更する
• 注意点
• 非同期処理はできない
• どうしてもしたい場合は、従来通りの MenuItem を使って BuildPlayer を呼び出
す手法にする
[Tips] Callbacks系はすべて interface となりました
• Attributeで指定する方法から、クラスを作成する方法へと変わりました
[PostProcessBuild(1)]
public static void OnPostprocessBuild(BuildTarget buildTarget, string path)
{
}
public class PostProcessBuildSample : IPostprocessBuildWithReport
{
public int callbackOrder { get { return 1; } }
public void OnPostprocessBuild(BuildReport report)
{
}
}
• 引数によって得られる情報も格段に増えているので新しい方法で実装するのを推奨

More Related Content

What's hot

UE4×Switchで60FPSの(ネットワーク)対戦アクションをなんとかして作る! | UNREAL FEST EXTREME 2020 WINTER
UE4×Switchで60FPSの(ネットワーク)対戦アクションをなんとかして作る!  | UNREAL FEST EXTREME 2020 WINTERUE4×Switchで60FPSの(ネットワーク)対戦アクションをなんとかして作る!  | UNREAL FEST EXTREME 2020 WINTER
UE4×Switchで60FPSの(ネットワーク)対戦アクションをなんとかして作る! | UNREAL FEST EXTREME 2020 WINTERエピック・ゲームズ・ジャパン Epic Games Japan
 
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動についてUE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動についてcom044
 
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しようUnity Technologies Japan K.K.
 
UE4 アセットロード周り-アセット参照調査-
UE4 アセットロード周り-アセット参照調査-UE4 アセットロード周り-アセット参照調査-
UE4 アセットロード周り-アセット参照調査-com044
 
Python / BlueprintによるUnreal Engineの自動化 / GTMF2019
Python / BlueprintによるUnreal Engineの自動化 / GTMF2019Python / BlueprintによるUnreal Engineの自動化 / GTMF2019
Python / BlueprintによるUnreal Engineの自動化 / GTMF2019Game Tools & Middleware Forum
 
マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD
マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DDマテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD
マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DDエピック・ゲームズ・ジャパン Epic Games Japan
 
UE4でAIとビヘイビアツリーと-基礎-
UE4でAIとビヘイビアツリーと-基礎-UE4でAIとビヘイビアツリーと-基礎-
UE4でAIとビヘイビアツリーと-基礎-com044
 

What's hot (20)

UE4×Switchで60FPSの(ネットワーク)対戦アクションをなんとかして作る! | UNREAL FEST EXTREME 2020 WINTER
UE4×Switchで60FPSの(ネットワーク)対戦アクションをなんとかして作る!  | UNREAL FEST EXTREME 2020 WINTERUE4×Switchで60FPSの(ネットワーク)対戦アクションをなんとかして作る!  | UNREAL FEST EXTREME 2020 WINTER
UE4×Switchで60FPSの(ネットワーク)対戦アクションをなんとかして作る! | UNREAL FEST EXTREME 2020 WINTER
 
聖剣伝説3でのUE4利用事例の紹介~Making of Mana | UNREAL FEST EXTREME 2020 WINTER
聖剣伝説3でのUE4利用事例の紹介~Making of Mana | UNREAL FEST EXTREME 2020 WINTER聖剣伝説3でのUE4利用事例の紹介~Making of Mana | UNREAL FEST EXTREME 2020 WINTER
聖剣伝説3でのUE4利用事例の紹介~Making of Mana | UNREAL FEST EXTREME 2020 WINTER
 
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動についてUE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
 
UE4のローカライズ機能紹介 (UE4 Localization Deep Dive)
UE4のローカライズ機能紹介 (UE4 Localization Deep Dive)UE4のローカライズ機能紹介 (UE4 Localization Deep Dive)
UE4のローカライズ機能紹介 (UE4 Localization Deep Dive)
 
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
 
大規模タイトルにおけるエフェクトマテリアル運用 (SQEX大阪: 林武尊様) #UE4DD
大規模タイトルにおけるエフェクトマテリアル運用 (SQEX大阪: 林武尊様) #UE4DD大規模タイトルにおけるエフェクトマテリアル運用 (SQEX大阪: 林武尊様) #UE4DD
大規模タイトルにおけるエフェクトマテリアル運用 (SQEX大阪: 林武尊様) #UE4DD
 
はじめてアンリアルエンジンで海戦をつくってみたときのお話
はじめてアンリアルエンジンで海戦をつくってみたときのお話はじめてアンリアルエンジンで海戦をつくってみたときのお話
はじめてアンリアルエンジンで海戦をつくってみたときのお話
 
「Press Button, Drink Coffee」 UE4における ビルドパイプラインとメンテナンスの全体像
「Press Button, Drink Coffee」 UE4における ビルドパイプラインとメンテナンスの全体像「Press Button, Drink Coffee」 UE4における ビルドパイプラインとメンテナンスの全体像
「Press Button, Drink Coffee」 UE4における ビルドパイプラインとメンテナンスの全体像
 
UE4を用いたTPS制作事例 EDF:IR レベル構成について
UE4を用いたTPS制作事例 EDF:IR レベル構成についてUE4を用いたTPS制作事例 EDF:IR レベル構成について
UE4を用いたTPS制作事例 EDF:IR レベル構成について
 
猫でも分かる UE4の新しいサンプル「Action RPG」について
猫でも分かる UE4の新しいサンプル「Action RPG」について猫でも分かる UE4の新しいサンプル「Action RPG」について
猫でも分かる UE4の新しいサンプル「Action RPG」について
 
UE4における大規模背景制作事例 描画特殊表現編
UE4における大規模背景制作事例 描画特殊表現編UE4における大規模背景制作事例 描画特殊表現編
UE4における大規模背景制作事例 描画特殊表現編
 
UE4におけるLoadingとGCのProfilingと最適化手法
UE4におけるLoadingとGCのProfilingと最適化手法UE4におけるLoadingとGCのProfilingと最適化手法
UE4におけるLoadingとGCのProfilingと最適化手法
 
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
 
UE4におけるエフェクトの基本戦略事例 前半
UE4におけるエフェクトの基本戦略事例  前半UE4におけるエフェクトの基本戦略事例  前半
UE4におけるエフェクトの基本戦略事例 前半
 
猫でも分かるUE4のポストプロセスを使った演出・絵作り
猫でも分かるUE4のポストプロセスを使った演出・絵作り猫でも分かるUE4のポストプロセスを使った演出・絵作り
猫でも分かるUE4のポストプロセスを使った演出・絵作り
 
UE4 アセットロード周り-アセット参照調査-
UE4 アセットロード周り-アセット参照調査-UE4 アセットロード周り-アセット参照調査-
UE4 アセットロード周り-アセット参照調査-
 
Python / BlueprintによるUnreal Engineの自動化 / GTMF2019
Python / BlueprintによるUnreal Engineの自動化 / GTMF2019Python / BlueprintによるUnreal Engineの自動化 / GTMF2019
Python / BlueprintによるUnreal Engineの自動化 / GTMF2019
 
UE4を用いたTPS制作事例 EDF:IR 地球を衛る兵士の歩き方
UE4を用いたTPS制作事例 EDF:IR 地球を衛る兵士の歩き方UE4を用いたTPS制作事例 EDF:IR 地球を衛る兵士の歩き方
UE4を用いたTPS制作事例 EDF:IR 地球を衛る兵士の歩き方
 
マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD
マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DDマテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD
マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD
 
UE4でAIとビヘイビアツリーと-基礎-
UE4でAIとビヘイビアツリーと-基礎-UE4でAIとビヘイビアツリーと-基礎-
UE4でAIとビヘイビアツリーと-基礎-
 

Similar to 【Unite 2018 Tokyo】エディター拡張マニアクス2018

そうだプラグイン作ろう =Unityの巻=
そうだプラグイン作ろう =Unityの巻=そうだプラグイン作ろう =Unityの巻=
そうだプラグイン作ろう =Unityの巻=Keiichi Kobayashi
 
NuGet でゲット! Visual Studio パッケージ マネージャ―概要
NuGet でゲット! Visual Studio パッケージ マネージャ―概要NuGet でゲット! Visual Studio パッケージ マネージャ―概要
NuGet でゲット! Visual Studio パッケージ マネージャ―概要Akira Inoue
 
Css nite(2010.09.23)
Css nite(2010.09.23)Css nite(2010.09.23)
Css nite(2010.09.23)Yoshiki Ushida
 
Extending the Unity Editor Extended
Extending the Unity Editor ExtendedExtending the Unity Editor Extended
Extending the Unity Editor ExtendedMasamitsu Ishikawa
 
Visual studio extensibility
Visual studio extensibilityVisual studio extensibility
Visual studio extensibilityTakeshi Fujimoto
 
Unityの夕べ in Fukuoka
Unityの夕べ in FukuokaUnityの夕べ in Fukuoka
Unityの夕べ in FukuokaShinobu Izumi
 
Editor スクリプティング 入門
Editor スクリプティング 入門Editor スクリプティング 入門
Editor スクリプティング 入門Keigo Ando
 
Mixiアプリで体験する Open Social
Mixiアプリで体験する Open SocialMixiアプリで体験する Open Social
Mixiアプリで体験する Open Socialngi group.
 
Osc2012 appinventor のその後
Osc2012 appinventor のその後Osc2012 appinventor のその後
Osc2012 appinventor のその後Katsumi Honda
 
Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Takako Miyagawa
 
初backlogで、試行錯誤。最終的にこうなった!
初backlogで、試行錯誤。最終的にこうなった!初backlogで、試行錯誤。最終的にこうなった!
初backlogで、試行錯誤。最終的にこうなった!Masahiro Ienaga
 
Jetpack Library 事始め
Jetpack Library 事始めJetpack Library 事始め
Jetpack Library 事始めTomohiro Kaizu
 
Eclipse を使った java 開発 111126 杉浦
Eclipse を使った java 開発 111126 杉浦Eclipse を使った java 開発 111126 杉浦
Eclipse を使った java 開発 111126 杉浦urasandesu
 
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術Unity Technologies Japan K.K.
 
Unityワークショップ
UnityワークショップUnityワークショップ
UnityワークショップMitu217
 
NET MAUI for .NET 7 for iOS, Android app development
 NET MAUI for .NET 7 for iOS, Android app development  NET MAUI for .NET 7 for iOS, Android app development
NET MAUI for .NET 7 for iOS, Android app development Shotaro Suzuki
 
iOS 8 Widget ~ 導入から Tips まで
iOS 8 Widget ~ 導入から Tips までiOS 8 Widget ~ 導入から Tips まで
iOS 8 Widget ~ 導入から Tips までYuki Tanabe
 

Similar to 【Unite 2018 Tokyo】エディター拡張マニアクス2018 (20)

そうだプラグイン作ろう =Unityの巻=
そうだプラグイン作ろう =Unityの巻=そうだプラグイン作ろう =Unityの巻=
そうだプラグイン作ろう =Unityの巻=
 
NuGet でゲット! Visual Studio パッケージ マネージャ―概要
NuGet でゲット! Visual Studio パッケージ マネージャ―概要NuGet でゲット! Visual Studio パッケージ マネージャ―概要
NuGet でゲット! Visual Studio パッケージ マネージャ―概要
 
Css nite(2010.09.23)
Css nite(2010.09.23)Css nite(2010.09.23)
Css nite(2010.09.23)
 
Extending the Unity Editor Extended
Extending the Unity Editor ExtendedExtending the Unity Editor Extended
Extending the Unity Editor Extended
 
Visual studio extensibility
Visual studio extensibilityVisual studio extensibility
Visual studio extensibility
 
Unityの夕べ in Fukuoka
Unityの夕べ in FukuokaUnityの夕べ in Fukuoka
Unityの夕べ in Fukuoka
 
20120118 titanium
20120118 titanium20120118 titanium
20120118 titanium
 
Editor スクリプティング 入門
Editor スクリプティング 入門Editor スクリプティング 入門
Editor スクリプティング 入門
 
Mixiアプリで体験する Open Social
Mixiアプリで体験する Open SocialMixiアプリで体験する Open Social
Mixiアプリで体験する Open Social
 
Osc2012 appinventor のその後
Osc2012 appinventor のその後Osc2012 appinventor のその後
Osc2012 appinventor のその後
 
Visual studio de debug
Visual studio de debugVisual studio de debug
Visual studio de debug
 
Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中
 
初backlogで、試行錯誤。最終的にこうなった!
初backlogで、試行錯誤。最終的にこうなった!初backlogで、試行錯誤。最終的にこうなった!
初backlogで、試行錯誤。最終的にこうなった!
 
Jetpack Library 事始め
Jetpack Library 事始めJetpack Library 事始め
Jetpack Library 事始め
 
Eclipse を使った java 開発 111126 杉浦
Eclipse を使った java 開発 111126 杉浦Eclipse を使った java 開発 111126 杉浦
Eclipse を使った java 開発 111126 杉浦
 
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
 
Titanium実装最初の一歩.
Titanium実装最初の一歩. Titanium実装最初の一歩.
Titanium実装最初の一歩.
 
Unityワークショップ
UnityワークショップUnityワークショップ
Unityワークショップ
 
NET MAUI for .NET 7 for iOS, Android app development
 NET MAUI for .NET 7 for iOS, Android app development  NET MAUI for .NET 7 for iOS, Android app development
NET MAUI for .NET 7 for iOS, Android app development
 
iOS 8 Widget ~ 導入から Tips まで
iOS 8 Widget ~ 導入から Tips までiOS 8 Widget ~ 導入から Tips まで
iOS 8 Widget ~ 導入から Tips まで
 

More from Unity Technologies Japan K.K.

建築革命、更に更に進化!便利さ向上【Unity Reflect ver 3.0 】
建築革命、更に更に進化!便利さ向上【Unity Reflect ver 3.0 】建築革命、更に更に進化!便利さ向上【Unity Reflect ver 3.0 】
建築革命、更に更に進化!便利さ向上【Unity Reflect ver 3.0 】Unity Technologies Japan K.K.
 
UnityのクラッシュをBacktraceでデバッグしよう!
UnityのクラッシュをBacktraceでデバッグしよう!UnityのクラッシュをBacktraceでデバッグしよう!
UnityのクラッシュをBacktraceでデバッグしよう!Unity Technologies Japan K.K.
 
Unityで始めるバーチャルプロダクション
Unityで始めるバーチャルプロダクションUnityで始めるバーチャルプロダクション
Unityで始めるバーチャルプロダクションUnity Technologies Japan K.K.
 
ビジュアルスクリプティング (旧:Bolt) で始めるUnity入門3日目 ゲームをカスタマイズしよう
ビジュアルスクリプティング (旧:Bolt) で始めるUnity入門3日目 ゲームをカスタマイズしようビジュアルスクリプティング (旧:Bolt) で始めるUnity入門3日目 ゲームをカスタマイズしよう
ビジュアルスクリプティング (旧:Bolt) で始めるUnity入門3日目 ゲームをカスタマイズしようUnity Technologies Japan K.K.
 
ビジュアルスクリプティングで始めるUnity入門2日目 ゴールとスコアの仕組み - Unityステーション
ビジュアルスクリプティングで始めるUnity入門2日目 ゴールとスコアの仕組み - Unityステーションビジュアルスクリプティングで始めるUnity入門2日目 ゴールとスコアの仕組み - Unityステーション
ビジュアルスクリプティングで始めるUnity入門2日目 ゴールとスコアの仕組み - UnityステーションUnity Technologies Japan K.K.
 
ビジュアルスクリプティングで始めるUnity入門1日目 プレイヤーを動かそう
ビジュアルスクリプティングで始めるUnity入門1日目 プレイヤーを動かそうビジュアルスクリプティングで始めるUnity入門1日目 プレイヤーを動かそう
ビジュアルスクリプティングで始めるUnity入門1日目 プレイヤーを動かそうUnity Technologies Japan K.K.
 
PlasticSCMの活用テクニックをハンズオンで一緒に学ぼう!
PlasticSCMの活用テクニックをハンズオンで一緒に学ぼう!PlasticSCMの活用テクニックをハンズオンで一緒に学ぼう!
PlasticSCMの活用テクニックをハンズオンで一緒に学ぼう!Unity Technologies Japan K.K.
 
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】Unity Technologies Japan K.K.
 
Unity教える先生方注目!ティーチャートレーニングデイを体験しよう
Unity教える先生方注目!ティーチャートレーニングデイを体験しようUnity教える先生方注目!ティーチャートレーニングデイを体験しよう
Unity教える先生方注目!ティーチャートレーニングデイを体験しようUnity Technologies Japan K.K.
 
「原神」におけるコンソールプラットフォーム開発
「原神」におけるコンソールプラットフォーム開発「原神」におけるコンソールプラットフォーム開発
「原神」におけるコンソールプラットフォーム開発Unity Technologies Japan K.K.
 
FANTASIANの明日使えない特殊テクニック教えます
FANTASIANの明日使えない特殊テクニック教えますFANTASIANの明日使えない特殊テクニック教えます
FANTASIANの明日使えない特殊テクニック教えますUnity Technologies Japan K.K.
 
インディーゲーム開発の現状と未来 2021
インディーゲーム開発の現状と未来 2021インディーゲーム開発の現状と未来 2021
インディーゲーム開発の現状と未来 2021Unity Technologies Japan K.K.
 
建築革命、更に進化!デジタルツイン基盤の真打ち登場【概要編 Unity Reflect ver 2.1 】
建築革命、更に進化!デジタルツイン基盤の真打ち登場【概要編 Unity Reflect ver 2.1 】建築革命、更に進化!デジタルツイン基盤の真打ち登場【概要編 Unity Reflect ver 2.1 】
建築革命、更に進化!デジタルツイン基盤の真打ち登場【概要編 Unity Reflect ver 2.1 】Unity Technologies Japan K.K.
 
Burstを使ってSHA-256のハッシュ計算を高速に行う話
Burstを使ってSHA-256のハッシュ計算を高速に行う話Burstを使ってSHA-256のハッシュ計算を高速に行う話
Burstを使ってSHA-256のハッシュ計算を高速に行う話Unity Technologies Japan K.K.
 
Cinemachineで見下ろし視点のカメラを作る
Cinemachineで見下ろし視点のカメラを作るCinemachineで見下ろし視点のカメラを作る
Cinemachineで見下ろし視点のカメラを作るUnity Technologies Japan K.K.
 
Unityティーチャートレーニングデイ -認定プログラマー編-
Unityティーチャートレーニングデイ -認定プログラマー編-Unityティーチャートレーニングデイ -認定プログラマー編-
Unityティーチャートレーニングデイ -認定プログラマー編-Unity Technologies Japan K.K.
 
Unityティーチャートレーニングデイ -認定3Dアーティスト編-
Unityティーチャートレーニングデイ -認定3Dアーティスト編-Unityティーチャートレーニングデイ -認定3Dアーティスト編-
Unityティーチャートレーニングデイ -認定3Dアーティスト編-Unity Technologies Japan K.K.
 
Unityティーチャートレーニングデイ -認定アソシエイト編-
Unityティーチャートレーニングデイ -認定アソシエイト編-Unityティーチャートレーニングデイ -認定アソシエイト編-
Unityティーチャートレーニングデイ -認定アソシエイト編-Unity Technologies Japan K.K.
 

More from Unity Technologies Japan K.K. (20)

建築革命、更に更に進化!便利さ向上【Unity Reflect ver 3.0 】
建築革命、更に更に進化!便利さ向上【Unity Reflect ver 3.0 】建築革命、更に更に進化!便利さ向上【Unity Reflect ver 3.0 】
建築革命、更に更に進化!便利さ向上【Unity Reflect ver 3.0 】
 
UnityのクラッシュをBacktraceでデバッグしよう!
UnityのクラッシュをBacktraceでデバッグしよう!UnityのクラッシュをBacktraceでデバッグしよう!
UnityのクラッシュをBacktraceでデバッグしよう!
 
Unityで始めるバーチャルプロダクション
Unityで始めるバーチャルプロダクションUnityで始めるバーチャルプロダクション
Unityで始めるバーチャルプロダクション
 
ビジュアルスクリプティング (旧:Bolt) で始めるUnity入門3日目 ゲームをカスタマイズしよう
ビジュアルスクリプティング (旧:Bolt) で始めるUnity入門3日目 ゲームをカスタマイズしようビジュアルスクリプティング (旧:Bolt) で始めるUnity入門3日目 ゲームをカスタマイズしよう
ビジュアルスクリプティング (旧:Bolt) で始めるUnity入門3日目 ゲームをカスタマイズしよう
 
ビジュアルスクリプティングで始めるUnity入門2日目 ゴールとスコアの仕組み - Unityステーション
ビジュアルスクリプティングで始めるUnity入門2日目 ゴールとスコアの仕組み - Unityステーションビジュアルスクリプティングで始めるUnity入門2日目 ゴールとスコアの仕組み - Unityステーション
ビジュアルスクリプティングで始めるUnity入門2日目 ゴールとスコアの仕組み - Unityステーション
 
ビジュアルスクリプティングで始めるUnity入門1日目 プレイヤーを動かそう
ビジュアルスクリプティングで始めるUnity入門1日目 プレイヤーを動かそうビジュアルスクリプティングで始めるUnity入門1日目 プレイヤーを動かそう
ビジュアルスクリプティングで始めるUnity入門1日目 プレイヤーを動かそう
 
PlasticSCMの活用テクニックをハンズオンで一緒に学ぼう!
PlasticSCMの活用テクニックをハンズオンで一緒に学ぼう!PlasticSCMの活用テクニックをハンズオンで一緒に学ぼう!
PlasticSCMの活用テクニックをハンズオンで一緒に学ぼう!
 
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
 
Unity教える先生方注目!ティーチャートレーニングデイを体験しよう
Unity教える先生方注目!ティーチャートレーニングデイを体験しようUnity教える先生方注目!ティーチャートレーニングデイを体験しよう
Unity教える先生方注目!ティーチャートレーニングデイを体験しよう
 
「原神」におけるコンソールプラットフォーム開発
「原神」におけるコンソールプラットフォーム開発「原神」におけるコンソールプラットフォーム開発
「原神」におけるコンソールプラットフォーム開発
 
FANTASIANの明日使えない特殊テクニック教えます
FANTASIANの明日使えない特殊テクニック教えますFANTASIANの明日使えない特殊テクニック教えます
FANTASIANの明日使えない特殊テクニック教えます
 
インディーゲーム開発の現状と未来 2021
インディーゲーム開発の現状と未来 2021インディーゲーム開発の現状と未来 2021
インディーゲーム開発の現状と未来 2021
 
建築革命、更に進化!デジタルツイン基盤の真打ち登場【概要編 Unity Reflect ver 2.1 】
建築革命、更に進化!デジタルツイン基盤の真打ち登場【概要編 Unity Reflect ver 2.1 】建築革命、更に進化!デジタルツイン基盤の真打ち登場【概要編 Unity Reflect ver 2.1 】
建築革命、更に進化!デジタルツイン基盤の真打ち登場【概要編 Unity Reflect ver 2.1 】
 
Burstを使ってSHA-256のハッシュ計算を高速に行う話
Burstを使ってSHA-256のハッシュ計算を高速に行う話Burstを使ってSHA-256のハッシュ計算を高速に行う話
Burstを使ってSHA-256のハッシュ計算を高速に行う話
 
Cinemachineで見下ろし視点のカメラを作る
Cinemachineで見下ろし視点のカメラを作るCinemachineで見下ろし視点のカメラを作る
Cinemachineで見下ろし視点のカメラを作る
 
徹底解説 Unity Reflect【開発編 ver2.0】
徹底解説 Unity Reflect【開発編 ver2.0】徹底解説 Unity Reflect【開発編 ver2.0】
徹底解説 Unity Reflect【開発編 ver2.0】
 
徹底解説 Unity Reflect【概要編 ver2.0】
徹底解説 Unity Reflect【概要編 ver2.0】徹底解説 Unity Reflect【概要編 ver2.0】
徹底解説 Unity Reflect【概要編 ver2.0】
 
Unityティーチャートレーニングデイ -認定プログラマー編-
Unityティーチャートレーニングデイ -認定プログラマー編-Unityティーチャートレーニングデイ -認定プログラマー編-
Unityティーチャートレーニングデイ -認定プログラマー編-
 
Unityティーチャートレーニングデイ -認定3Dアーティスト編-
Unityティーチャートレーニングデイ -認定3Dアーティスト編-Unityティーチャートレーニングデイ -認定3Dアーティスト編-
Unityティーチャートレーニングデイ -認定3Dアーティスト編-
 
Unityティーチャートレーニングデイ -認定アソシエイト編-
Unityティーチャートレーニングデイ -認定アソシエイト編-Unityティーチャートレーニングデイ -認定アソシエイト編-
Unityティーチャートレーニングデイ -認定アソシエイト編-
 

【Unite 2018 Tokyo】エディター拡張マニアクス2018