void OnSelectionChange() { List <GameObject> new_objects = new List <GameObject>(); List <string> new_prefixes = new List <string>(); for (int i = 0; i < Selection.transforms.Length; ++i) { Transform t = Selection.transforms[i]; //NeuronAnimatorInstance animator_driver = t.GetComponent<NeuronAnimatorInstance>(); NeuronTransformsInstance transform_driver = t.GetComponent <NeuronTransformsInstance>(); NeuronTransformsInstanceVR transform_driverVR = t.GetComponent <NeuronTransformsInstanceVR>(); if (transform_driver != null) { new_objects.Add(t.gameObject); new_prefixes.Add(transform_driver.prefix != "" ? transform_driver.prefix : default_prefix); } else if (transform_driverVR != null) { new_objects.Add(t.gameObject); new_prefixes.Add(transform_driverVR.prefix != "" ? transform_driverVR.prefix : default_prefix); } } if (new_objects.Count > 0) { objects = new_objects; prefixes = new_prefixes; } }
public override void OnInspectorGUI() { NeuronTransformsInstanceVR vrScript = (NeuronTransformsInstanceVR)target; DrawDefaultInspector(); if (GUILayout.Button("Load bone references")) { Debug.Log("[NeuronTransformsInstanceVR] - LOAD all Transform references into the bones list!"); vrScript.Bind(vrScript.root, vrScript.prefix); vrScript.editorScriptHasLoadedBones = true; EditorUtility.SetDirty(vrScript); } if (GUILayout.Button("Clear bone references")) { Debug.Log("[NeuronTransformsInstanceVR] - CLEAR all Transform references in the bones list!"); for (int i = 0; i < vrScript.bones.Length; i++) { vrScript.bones[i] = null; } vrScript.editorScriptHasLoadedBones = false; EditorUtility.SetDirty(vrScript); } }
public bool Init(Transform root, string prefix, Transform[] bound_transforms, Transform rootOverride) { 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); } if (rootOverride == null) { // 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, NeuronBoneVersion.NotSet_AutoByName); NeuronTransformsInstance referenceInstance = referenceObject.GetComponent <NeuronTransformsInstance> (); if (referenceInstance != null) { referenceInstance.motionUpdateMethod = Neuron.UpdateMethod.Normal; } else { NeuronTransformsInstanceVR referenceInstanceVR = referenceObject.GetComponent <NeuronTransformsInstanceVR> (); if (referenceInstanceVR != null) { referenceInstance.motionUpdateMethod = Neuron.UpdateMethod.Normal; } } // 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) && components [i].GetType() != typeof(NeuronTransformsInstanceVR)) { GameObject.DestroyImmediate(c); } } } else { referenceObject = rootOverride.gameObject; referenceTransforms = new Transform[(int)NeuronBones.NumOfBones]; NeuronHelper.Bind(rootOverride, referenceTransforms, prefix, false, NeuronBoneVersion.NotSet_AutoByName); } return(true); }