Exemple #1
0
        protected virtual void SyncModelTransform()
        {
            Vector3 position = HandlePosition;

            Model.transform.position = position;
            Model.transform.rotation = Rotation;
            float screenScale = RuntimeHandlesComponent.GetScreenScale(transform.position, Window.Camera);

            if (!float.IsInfinity(screenScale) && !float.IsNaN(screenScale))
            {
                screenScale = Mathf.Max(0, screenScale);

                Vector3 scale      = Appearance.InvertZAxis ? new Vector3(1, 1, -1) * screenScale : Vector3.one * screenScale;
                Vector3 lossyScale = transform.lossyScale;
                lossyScale.x = 1 / Mathf.Max(0.00001f, lossyScale.x);
                lossyScale.y = 1 / Mathf.Max(0.00001f, lossyScale.y);
                lossyScale.z = 1 / Mathf.Max(0.00001f, lossyScale.z);

                Vector3 prevScale = Model.transform.localScale;
                Vector3 newScale  = Vector3.Scale(scale, lossyScale);
                Model.transform.localScale = newScale;
                if (prevScale == Vector3.zero && prevScale != newScale)
                {
                    Model.UpdateModel();
                }
            }
        }