GUIを編集中に更新? Unity
ExecuteInEditModehttp://unity3d.com/support/documentation/ScriptReference/ExecuteInEditMode.html
プラグイン作成 Unity
- 必要になりそうなクラス一覧
http://unity3d.com/support/documentation/ScriptReference/20_class_hierarchy.Editor_Classes.html
- ダメージ(Damage)と防御力(Armor)をGUIで調整するサンプル
これで作ります。ドキュメントはわかりにくい。
http://unity3d.com/support/documentation/ScriptReference/CustomEditor.CustomEditor.html
- CustomEditorExample.js(プログラミング名もないしクラス名が書いてるけどJSです)
→これは"/Assets/Sctipt"へ入れます。InspectorビューでGUIで表示される元ネタになります。
→このスクリプトはどれに対してもドラッグ&ドロップ適用しません
@CustomEditor(SimpleExampleScript) class CustomEditorExample extends Editor { function OnInspectorGUI() { // Get the place of the next available position in the script target.damage = EditorGUILayout.IntSlider("Damage:",target.damage,1,100); ProgressBar (target.damage / 100.0, "Damage"); target.armor = EditorGUILayout.IntSlider("Armor:",target.armor,1,100); ProgressBar (target.armor / 100.0, "Armor"); } // Custom GUILayout progress bar. function ProgressBar (value : float, label : String) { var size : Vector2 = GUI.skin.GetStyle("ProgressBarText").CalcSize(GUIContent(label)); var rect : Rect = GUILayoutUtility.GetRect (size.x, Mathf.Max(size.y)); rect = Rect(rect.x + 4, rect.y, rect.width -8, rect.height); EditorGUI.ProgressBar (rect, value, label); EditorGUILayout.Space(); } }
→変数”target”に対して何も代入されてないと思ったが、Editorクラスのtargetであり、Inspectorで実際適用されたObjectを示しています。
http://unity3d.cba.pl/Documentation/Documentation/ScriptReference/Editor-target.html
- SimpleExampleScript.js
→これはInspectorビューへ表示されるエディタ用のスクリプトではない!
var armor : int = 75; var damage : int = 25;
→これは実際のプレイヤーに適用します
Vector3のすぐ忘れるからメモ Unity
カメラからみて前(/)か上(↑)か右(→)- Vector3.forward
z軸ですね
(0, 0, 1)
- Vector3.right
y軸ですね
(0, 1, 0)
- Vector3.right
x軸ですね
(1, 1, 0)
- 自身が30度ずつ回転(C#)
左回り
void Update () { transform.Rotate(Vector3.forward * 30); }
- ターゲットの周りを30度ずつ回転(C#)
こっちは右回り
Vector3 targetPos; targetPos = new Vector3(2, 1, 0); // ターゲットの座標 void Update () { transform.RotateAround(targetPos, Vector3.forward, 30); }
Blenderでのマウス
◯Logitech V470 Bluetooth Cordless Laser Mouse 英語版(ホワイト)→これがよさげ
☓ロジクール MX レボリューション MX-R
→これは向いてないっぽい
だんだん小さくする C# Unity
transform.localScale -= new Vector3(0.9F, 0.9F, 1.0F);
↑これだと小さくなりすぎてマイナス値で逆転してしまう
transform.localScale = transform.localScale * 0.9F;
↑こんな感じが妥当
InvokeRepeating("Besmall", 0, 0.05F);
・呼び出し元
void Besmall () { transform.localScale = transform.localScale * 0.9F; }
・呼び出し先
↑こんな感じでやる OR,
void Update () { transform.localScale = transform.localScale * 0.9F; }
Updateでやったり
Unityクックブック(オライリー)とか作りたいな
回転 C# Unity
transform.Rotate(Vector3.forward * 30); z軸が30度になるのではなく、30度回転する。
Unity メモ
TransformDirection()はローカルのTransform情報をワールド座標系に変換JS
var forward = cameraTransform.TransformDirection(Vector3.forward);
カメラの正面方向をワールド座標でどちらを向いているかをVector3形式で取得。
var right = Vector3(forward.z, 0, -forward.x);
Xを-Zへ、ZをXへ置き換えれば、↓(手前)・↑(奥行き)を←・→にできるっぽい
SendMessageはコルーチンもコール可能 Unity
ちなみにStartCoroutineで呼んだのはStopCoroutine で止められるSendMessageのも止められる?
- StartCoroutine
http://unity3d.com/support/documentation/ScriptReference/MonoBehaviour.StartCoroutine.html
- StopCoroutine
http://unity3d.com/support/documentation/ScriptReference/MonoBehaviour.StopCoroutine.html