private IEnumerator DoComponentAlphaTransitions() { const float fadeOutThreshold = 0.89f; const float fadeDuration = 0.189f; int numberOfAxes = Enum.GetValues(typeof(SceneGizmoComponent)).Length; Vector3[] gizmoAxes = new Vector3[] { _gizmoTransform.right, -_gizmoTransform.right, _gizmoTransform.up, -_gizmoTransform.up, _gizmoTransform.forward, -_gizmoTransform.forward }; while (true) { Vector3 cameraLook = _gizmoCameraTransform.forward; for (int axisIndex = 0; axisIndex < numberOfAxes; ++axisIndex) { if ((SceneGizmoComponent)axisIndex == SceneGizmoComponent.Cube) { _componentAlphas[axisIndex] = 1.0f; continue; } GizmoCompAlphaFadeInfo fadeInfo = _componentAlphaFadeInfo[axisIndex]; float absDot = Mathf.Abs(Vector3.Dot(cameraLook, gizmoAxes[axisIndex - 1])); if (!fadeInfo.IsActive) { if (absDot >= fadeOutThreshold) { fadeInfo.ChangeTransition(GizmoCompTransition.FadeOut, _componentAlphas[axisIndex]); } else { fadeInfo.ChangeTransition(GizmoCompTransition.FadeIn, _componentAlphas[axisIndex]); } } if (fadeInfo.IsActive) { _componentAlphas[axisIndex] = Mathf.Lerp(fadeInfo.SrcAlpha, fadeInfo.DestAlpha, fadeInfo.ElapsedTime / fadeDuration); fadeInfo.ElapsedTime += Time.deltaTime; if (fadeInfo.ElapsedTime >= fadeDuration) { _componentAlphas[axisIndex] = fadeInfo.DestAlpha; fadeInfo.Stop(); } } } yield return(null); } }
private void Start() { CreateSceneGizmoCamera(); _axisLabelTextures[0] = Resources.Load("Textures/XAxisLabel") as Texture2D; _axisLabelTextures[1] = Resources.Load("Textures/YAxisLabel") as Texture2D; _axisLabelTextures[2] = Resources.Load("Textures/ZAxisLabel") as Texture2D; int axisCount = Enum.GetValues(typeof(SceneGizmoComponent)).Length; for (int axisIndex = 0; axisIndex < axisCount; ++axisIndex) { _componentAlphaFadeInfo[axisIndex] = new GizmoCompAlphaFadeInfo(); _componentAlphas[axisIndex] = 1.0f; } UpdateGizmoCamera(); StartCoroutine(DoComponentAlphaTransitions()); }