public RotationAxis Initialize(RuntimeTransformHandle p_runtimeHandle, Vector3 p_axis, Vector3 p_perp, Color p_color)
        {
            _parentTransformHandle = p_runtimeHandle;
            _axis         = p_axis;
            _perp1        = p_perp;
            _perp2        = Vector3.Cross(_axis, _perp1);
            _defaultColor = p_color;

            InitializeMaterial();

            transform.SetParent(p_runtimeHandle.transform, false);

            GameObject o = new GameObject();

            o.transform.SetParent(transform, false);
            MeshRenderer mr = o.AddComponent <MeshRenderer>();

            mr.material = _material;
            MeshFilter mf = o.AddComponent <MeshFilter>();

            mf.mesh = MeshUtils.CreateTorus(2f, .02f, 32, 6);
            MeshCollider mc = o.AddComponent <MeshCollider>();

            mc.sharedMesh             = MeshUtils.CreateTorus(2f, .1f, 32, 6);
            o.transform.localRotation = Quaternion.FromToRotation(Vector3.up, _axis);
            return(this);
        }
        public RotationAxis Initialize(RuntimeTransformHandle p_runtimeHandle, Vector3 p_axis, Vector3 p_perp, Color p_color)
        {
            _parentTransformHandle = p_runtimeHandle;
            _axis         = p_axis;
            _perp         = p_perp;
            _defaultColor = p_color;

            InitializeMaterial();

            transform.SetParent(p_runtimeHandle.transform, false);

            GameObject o = new GameObject();

            o.transform.SetParent(transform, false);
            MeshRenderer mr = o.AddComponent <MeshRenderer>();

            mr.material = _material;
            MeshFilter mf = o.AddComponent <MeshFilter>();

            mf.mesh = MeshUtils.CreateTorus(2f, .02f, 32, 6);
            MeshCollider mc = o.AddComponent <MeshCollider>();

            mc.sharedMesh             = MeshUtils.CreateTorus(2f, .1f, 32, 6);
            o.transform.localRotation = Quaternion.FromToRotation(Vector3.up, _axis);
            o.layer = p_runtimeHandle.raycastLayer;

            o = new GameObject();
            o.transform.SetParent(transform, false);
            mr                        = o.AddComponent <MeshRenderer>();
            mr.material               = new Material(Shader.Find("sHTiF/HandleShader"));
            mr.material.color         = new Color(1, 1, 0, .5f);
            _arcMesh                  = o.AddComponent <MeshFilter>();
            o.transform.localRotation = Quaternion.FromToRotation(Vector3.up, _axis);
            o.layer                   = p_runtimeHandle.raycastLayer;
            o.SetActive(false);

            return(this);
        }