問題1 答え
問題1 解説
http://ufcpp.net/study/csharp/sp_attribute.html引用 : ++C++ // 未確認飛行 C
問題1 解説
問題1 解説
問題1 解説
問題1 解説
問題1 解説
問題1 解説
問題1 解説
問題2 答え
問題2 解説
問題2 解説
問題2 解説
問題2 解説
問題2 解説
問題2 解説
問題2 解説
問題2 解説
問題2 解説
問題2 解説
問題2 解説
問題3 答え
using UnityEditor;
using UnityEngine;
public class Question3 : EditorWindow
{
[MenuItem("Question3/EditorWindow")]
static void Open()
{
GetWindow<Question3>();
}
void OnGUI()
{
if (Event.current.type == EventType.ContextClick)
{
GenericMenu genericMenu = new GenericMenu();
genericMenu.AddItem(new GUIContent("CreateCube"), false, () => GameObject.CreatePrimitive(PrimitiveType.Cube));
genericMenu.ShowAsContext();
}
}
}
問題3 解説
問題3 解説
Rect ( 0, 0, 100 , 10 )
問題3 解説
問題4 解答
using UnityEditor;
[CustomEditor(typeof(Question4))]
public class Question4Inspector : Editor
{
public override void OnInspectorGUI()
{
Question4 question4 = (Question4)target;
question4.username = EditorGUILayout.TextField("名前",
question4.username);
question4.hp = EditorGUILayout.IntSlider("HP", question4.hp, 0, 10);
question4.atk = EditorGUILayout.IntSlider("力", question4.atk, 0, 10);
question4.agi = EditorGUILayout.IntSlider("すばやさ", question4.agi, 0, 10);
}
}
using UnityEngine;
public class Question4 : MonoBehaviour
{
public string username;
public int hp, atk, agi;
}
問題4 解説
問題4 解説
GameObjectInspector
TransformInspector
CameraInspector
問題4 解説
GameObject
Transform
Camera
GameObjectInspector
TransformInspector
CameraInspector
問題4 解説
問題4 解説
MonoScript MonoScriptInspector
問題4 解説
MonoScript MonoScriptInspector
Editor4Inspector
問題4 解説
public override void OnInspectorGUI()
{
}
問題4 解説
問題5 答え
using UnityEngine;
public class Question5 : MonoBehaviour
{
public Vector3[] positions = new Vector3[]
{
new Vector3(0,0,0),
new Vector3(-5,0,0),
new Vector3(0,5,0),
new Vector3(0,0,5),
new Vector3(5,-5,5),
};
void OnDrawGizmos()
{
foreach (var position in positions)
{
Gizmos.DrawWireSphere(position, 0.5f);
}
}
}
using UnityEngine;
public class Question5 : MonoBehaviour
{
public Vector3[] positions = new Vector3[]
{
new Vector3(0,0,0),
new Vector3(-5,0,0),
new Vector3(0,5,0),
new Vector3(0,0,5),
new Vector3(5,-5,5),
};
}
using UnityEditor;
using UnityEngine;
public class Question5Editor
{
[DrawGizmo(GizmoType.Active)]
static void OnDrawGizmo(Question5 question5, GizmoType type)
{
foreach (Vector3 position in question5.positions)
{
Gizmos.DrawWireSphere(position, 0.5f);
}
}
}
問題5 解説
(25分)
ヒント1は10分後
ヒント2は15分後
問題5 解説
(25分)
ヒント1は10分後
ヒント2は15分後
問題5 解説
(25分)
ヒント1は10分後
ヒント2は15分後
GizmoTypeによって描画を切り替える
オブジェクトがどのような状態なのかを細かく監視
問題5 解説
問題6
問題6 答え
https://gist.github.com/anchan828/8ce42635b5ce92c90c23
問題6 解説
問題6 解説
問題7
問題7 答え
https://gist.github.com/anchan828/a1442127953909d2ea23
問題7 解説
ScriptableObjectを作成するのは簡単
ただし管理を厳密に
問題7 解説
UnityEditor上で値が変更されていても
ファイルには保存されていない
データの保存
保存されるタイミングはUnityEditor終了時
問題7 解説
すぐデータをファイルに保存するには、
EditorUtility.SetDirty
&
AssetDatabase.SaveAssets
を使用する
データの保存
問題7 解説
問題8 答え
https://gist.github.com/anchan828/fe92724044cb47315dae
問題8 解説
AssetPostprocessorを継承したクラス
インポートされるアセットは全てココを通る
問題8 解説
サポートされていないアセットのインポート結
果を取得するにはOnPostprocessAllAssetsを
使用する
ShaderやScriptableObjectなど
問題8 解説
問題9答え
https://gist.github.com/anchan828/6665d545062d07b8210b
問題9解説
EditorUtility.OpenFilePanelはファイルの絶対パスを返す
キャンセルされると空文字を返す
キャンセルされるまでファイルを追加する処理
問題9解説
EditorApplication.OpenSceneAdditive
は絶対パスでは動作しないことに注意
問題9 解説
問題10 答え
https://gist.github.com/anchan828/4c18205a5e4a7fa6e316
問題10 解説
Undo.RegisterCreatedObjectUndo
オブジェクトの生成に関するUndo
Undo.RegisterSceneUndo
シーンに関するUndo
Undo.∼Snapshot系
オブジェクト操作に関するUndo
問題10 解説

基本答え&解説のみ