//void OnEnable()
    //{
    //    // Setup the SerializedProperties.
    //    transformsField = serializedObject.FindProperty("transforms");
    //}

    public override void OnInspectorGUI()
    {
        Neuron.NeuronTransformsInstance script = (Neuron.NeuronTransformsInstance)target;

        bool preUseNewRig = script.useNewRig;

        DrawDefaultInspector();
        if (preUseNewRig != script.useNewRig)
        {
            if (script.root == null)
            {
                script.root = script.transform;
            }

            for (int i = 0; i < script.transforms.Length; i++)
            {
                script.transforms[i] = null;
            }
            script.Bind(script.transform, script.prefix);

            EditorUtility.SetDirty(script);

            UnityEditor.SceneManagement.EditorSceneManager.MarkAllScenesDirty();
        }
        if (GUILayout.Button("bind"))
        {
            Debug.Log("[NeuronTransformsInstanceVR] - LOAD all Transform references into the bones list!");

            script.Bind(script.transform, script.prefix);

            EditorUtility.SetDirty(script);

            UnityEditor.SceneManagement.EditorSceneManager.MarkAllScenesDirty();
        }

        // 这种做法适合不定长数组,对定长数组不起作用
        //EditorGUILayout.PropertyField(serializedObject.FindProperty("transforms"), new GUIContent("transforms"), true);
        serializedObject.Update();
        transformsField = serializedObject.FindProperty("transforms");
        EditorGUILayout.PropertyField(serializedObject.FindProperty("transforms"), new GUIContent("transforms"), true);

        EditorGUI.indentLevel += 1;
        // if (transformsField.isExpanded)
        {
            //EditorGUILayout.PropertyField(transformsField.FindPropertyRelative("Array.size"));
            for (int i = 0; i < transformsField.arraySize; i++)
            {
                if (script.useNewRig && (i == (int)Neuron.NeuronBones.Spine3 || i == (int)Neuron.NeuronBones.Neck))
                {
                    EditorGUILayout.PropertyField(transformsField.GetArrayElementAtIndex(i), new GUIContent(((Neuron.NeuronBonesV2)i).ToString()));
                }
                else
                {
                    EditorGUILayout.PropertyField(transformsField.GetArrayElementAtIndex(i), new GUIContent(((Neuron.NeuronBones)i).ToString()));
                }
            }
        }
        EditorGUI.indentLevel -= 1;
        serializedObject.ApplyModifiedProperties();
    }
Ejemplo n.º 2
0
        public static void AddSkeletonBoneLines(Transform root, string prefix, Color color, int render_queue_plus, float parent_width, float child_width)
        {
            Material line_material = GetBoneLineMaterial(color, render_queue_plus);

            if (line_material)
            {
                int counter = NSH.AddBonesComponentsTransform <BoneLine>(root, prefix, delegate_add_bone_line_transform, line_material, parent_width, child_width);
                NeuronTransformsInstance instance = root.GetComponent <NeuronTransformsInstance>();
                instance.Bind(root, prefix);
                Transform t = instance.transforms[(int)NeuronBones.Head];
                if (t != null && t.childCount > 0)
                {
                    // get end_end
                    Transform child = t.GetChild(0);
                    if (child != null)
                    {
                        BoneLine boneline = child.gameObject.AddComponent <BoneLine>();
                        boneline.AddRenderer(line_material, parent_width, child_width, t, child);
                        counter++;
                    }
                }

                Debug.Log(string.Format("[NeuronUtilities] {0} Bone lines added to {1}.", counter, root.name), root);
            }
        }
        public bool Init(Transform root, string prefix, Transform[] bound_transforms)
        {
            if (root == null)
            {
                Debug.LogError("[NeuronTransformsPhysicalReference] Invalid root Transform");
                return(false);
            }

            // check if there is enough Rigidbody Component on the bones,
            // if not return false to prevent init reference_object
            if (!CheckRigidbodies(bound_transforms))
            {
                Debug.LogError(string.Format(
                                   "[NeuronTransformsPhysicalReference] Trying to use physics update but no Rigidbody Component in Actor \"{0}\". Did you forget to add Rigidbody Component?",
                                   root.gameObject.name), root);
                return(false);
            }

            // duplicate bound object as reference object,
            // we only use this reference object's transforms to get world transforms
            referenceObject      = (GameObject)GameObject.Instantiate(root.gameObject, root.position, root.rotation);
            referenceObject.name = string.Format("{0} (neuron reference)", root.gameObject.name);
            referenceTransforms  = new Transform[(int)NeuronBones.NumOfBones];
            NeuronHelper.Bind(referenceObject.transform, referenceTransforms, prefix, false);

            NeuronTransformsInstance referenceInstance = referenceObject.GetComponent <NeuronTransformsInstance>();

            if (referenceInstance != null)
            {
                referenceInstance.physicalUpdate    = false;
                referenceInstance.commandServerPort = -1;
            }

            // remove all unnecessary components, this will prevent rendering and any unexpected behaviour from custom scripts
            Component[] components = referenceObject.GetComponentsInChildren <Component>();
            for (int i = 0; i < components.Length; ++i)
            {
                Component c = components[i];
                if (c.GetType() != typeof(Transform) &&
                    components[i].GetType() != typeof(NeuronTransformsInstance))
                {
                    GameObject.DestroyImmediate(c);
                }
            }

            return(true);
        }