using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; public class JointsHighlighter : MonoBehaviour { private static List _jointsHighlighters = new List(); public GameObject HighCube; private MeshRenderer _meshRenderer; public HingeJoint _hingeJoint; public ConfigurableJoint _confJoint; public Rigidbody _rigidbody; public float AngleLimitMin; public float AngleLimitMax; public void Awake() { _rigidbody = GetComponent(); if(_rigidbody) { _rigidbody.centerOfMass = _rigidbody.transform.localPosition; } _hingeJoint = GetComponent(); _confJoint = GetComponent(); _meshRenderer = HighCube.GetComponent(); _jointsHighlighters.Add(this); _meshRenderer.enabled =false; var collider = HighCube.GetComponent(); if(collider.GetComponent()==null) { var cp = collider.gameObject.AddComponent(); cp.HingeJoint = _hingeJoint; cp.ConfJoint = _confJoint; } else { var cp = collider.gameObject.GetComponent(); cp.HingeJoint = _hingeJoint; cp.ConfJoint = _confJoint; } } public void OnDestroy() { _jointsHighlighters.Remove(this); } public void Highlighted() { //_rigidbody.constraints = RigidbodyConstraints.None; _meshRenderer.enabled = true; var other = _jointsHighlighters.Where(o => o != this).ToList(); foreach (var item in other) { item._meshRenderer.enabled = false; //_rigidbody.constraints = RigidbodyConstraints.FreezeAll; } } public class ChildObject { public Transform Transform; public Quaternion Rotation; public Vector3 Position; public Rigidbody Rigidbody; public ChildObject (GameObject go) { Transform = go.transform; Rotation = go.transform.localRotation; Position = go.transform.localPosition; Rigidbody = go.GetComponent(); } public void Update() { Transform.localRotation = Rotation; Transform.localPosition = Position; //if(Rigidbody) //{ // Rigidbody.angularVelocity = Vector3.zero; // Rigidbody.isKinematic = false; //} } public void Reset() { if(Rigidbody) { Rigidbody.isKinematic = true; } } } public List GetChildren () { var result = new List(); var trs = GetComponentsInChildren(); foreach (var tr in trs) { if(tr!= transform) { if(tr.GetComponent()!= null) { result.Add(new ChildObject(tr.gameObject)); } } } return result; } }