private void OnDisable()
 {
     if (!HasPreviewGUI())
     {
         return;
     }
     m_Preview.Cleanup();
     m_Preview                 = null;
     m_PreviewTarget           = null;
     m_PreviewMeshRenderer     = null;
     m_TargetBlock             = null;
     EditorApplication.update -= Update;
 }
        private void OnEnable()
        {
            if (!HasPreviewGUI())
            {
                return;
            }
            m_CameraDirection                   = Vector3.Normalize(new Vector3(0f, 3f, 15f));
            m_Preview                           = new PreviewRenderUtility();
            m_Preview.camera.fieldOfView        = 30.0f;
            m_Preview.camera.nearClipPlane      = 0.3f;
            m_Preview.camera.farClipPlane       = 1000;
            m_Preview.camera.transform.position = m_CameraDirection * m_CameraDistance;

            m_PreviewTarget = GameObject.Instantiate(((Component)target).gameObject).GetComponent <GPUAnimationController>();
            m_Preview.AddSingleGO(m_PreviewTarget.gameObject);
            m_PreviewMeshRenderer = m_PreviewTarget.GetComponent <MeshRenderer>();
            m_TargetBlock         = new MaterialPropertyBlock();
            m_PreviewTarget.transform.position = Vector3.zero;
            m_PreviewTarget.Init();
            m_PreviewTarget.SetAnimation(0);

            Material transparentMaterial = new Material(Shader.Find("Unlit/Transparent"));

            transparentMaterial.SetColor("_Color", new Color(1, 1, 1, .3f));

            m_BoundsViewer = GameObject.CreatePrimitive(PrimitiveType.Cube);
            m_BoundsViewer.GetComponent <MeshRenderer>().material = transparentMaterial;

            m_Preview.AddSingleGO(m_BoundsViewer.gameObject);
            m_BoundsViewer.transform.SetParent(m_PreviewTarget.transform);
            m_BoundsViewer.transform.localRotation = Quaternion.identity;
            m_BoundsViewer.transform.localScale    = m_PreviewTarget.m_MeshFilter.sharedMesh.bounds.size;
            m_BoundsViewer.transform.localPosition = m_PreviewTarget.m_MeshFilter.sharedMesh.bounds.center;
            m_BoundsViewer.SetActive(false);

            EditorApplication.update += Update;
        }