2017年5月27日 星期六

Inspector Value List

Script(C#):

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Biochemical_Multitude : ObjectClass
{
    // 物件模式
    public enum SelectObj
    {
        roteObj,
        moveObj,
    }
    public SelectObj objsType;

    // 物件行為方向
    public enum Direction
    {
        forward,
        up,
        down,
        left,
        right,
    }
    public Direction selectDrection;

    public List roteObjs = new List();
    public float roteSpeed;
    public List moveObjs = new List();
    public float moveSpeed;

    void Update()
    {
        switch (objsType)
        {
            case SelectObj.moveObj:
                foreach (Transform tra in moveObjs)
                    Move(tra, driectionFunction(selectDrection), moveSpeed);

                break;

            case SelectObj.roteObj:

                foreach (Transform tra in roteObjs)
                    Rote(tra, driectionFunction(selectDrection), roteSpeed);
                break;
        }
    }

    /// 
    /// 方向
    /// 
    /// 
    /// 
    Vector3 driectionFunction(Direction direction)
    {
        Vector3 vector3 = Vector3.zero;

        switch (direction)
        {
            case Direction.forward:
                vector3 = Vector3.forward;
                break;
            case Direction.up:
                vector3 = Vector3.up;
                break;
            case Direction.down:
                vector3 = Vector3.down;
                break;
            case Direction.left:
                vector3 = Vector3.left;
                break;
            case Direction.right:
                vector3 = Vector3.right;
                break;
        }
        return vector3;
    }
}

----------------------------
Editor Script Script(C#):

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(Biochemical_Multitude))]
public class Biochemical_MultitudeEditor : Editor {
    public override void OnInspectorGUI()
    {
        serializedObject.Update();
        var script = target as Biochemical_Multitude;
        SerializedProperty tps = serializedObject.FindProperty("roteObjs");  // 路徑
        EditorGUI.BeginChangeCheck();
        EditorGUILayout.PropertyField(tps, new GUIContent("roteObjs"), true);
        if (EditorGUI.EndChangeCheck())
            serializedObject.ApplyModifiedProperties();
     }
}

-------------
結果圖: