// ================================================================ // // フェーダーを作る. public Botan.Fader createFader() { Botan.Fader fader = (GameObject.Instantiate(this.fader_prefab) as GameObject).GetComponent <Botan.Fader>(); Transform fader_panel_transform = this.uiCanvas.transform.Find("FaderPanel"); if (fader_panel_transform != null) { fader.GetComponent <RectTransform>().SetParent(fader_panel_transform); } else { fader.GetComponent <RectTransform>().SetParent(this.uiCanvas.GetComponent <RectTransform>()); fader.GetComponent <RectTransform>().SetAsLastSibling(); } fader.GetComponent <RectTransform>().localPosition = Vector3.zero; fader.GetComponent <RectTransform>().localScale = new Vector3(Screen.width + 2.0f, Screen.height + 2.0f, 1.0f); // 保険で少し大きくしておく. return(fader); }
// ================================================================ // public Botan.Fader createFader() { Botan.Fader fader = (GameObject.Instantiate(this.fader_prefab) as GameObject).GetComponent <Botan.Fader>(); return(fader); }
void Update() { // ---------------------------------------------------------------- // // 色の補間. Vector3 rgb_current = Fader.color_to_vector3(this.colors.current); Vector3 rgb_goal = Fader.color_to_vector3(this.colors.goal); this.is_fading = false; float min_distance = 0.01f; if (Vector3.Distance(rgb_current, rgb_goal) < min_distance) { rgb_current = rgb_goal; } else { Vector3 rgb_next = Vector3.Lerp(rgb_current, rgb_goal, this.fade_rate); Vector3 distance_vector = rgb_next - rgb_current; if (distance_vector.magnitude < min_distance) { distance_vector.Normalize(); distance_vector *= min_distance; rgb_next = rgb_current + distance_vector; } rgb_current = rgb_next; this.is_fading = true; } // ---------------------------------------------------------------- // // アルファーの補間. float alpha_current = this.colors.current.a; float alpha_goal = this.colors.goal.a; if (Mathf.Abs(alpha_goal - alpha_current) < min_distance) { alpha_current = alpha_goal; } else { float alpha_next = Mathf.Lerp(alpha_current, alpha_goal, this.fade_rate); if (Mathf.Abs(alpha_next - alpha_current) < min_distance) { alpha_next = alpha_current + min_distance * Mathf.Sign(alpha_next - alpha_current); } alpha_current = alpha_next; this.is_fading = true; } // ---------------------------------------------------------------- // // UI.Image にセットする. this.colors.current = Fader.vector3_to_color(rgb_current, alpha_current); if (this.colors.current.a > 0.0f) { this.ui_image.color = this.colors.current; this.ui_image.enabled = true; } else { this.ui_image.enabled = false; } }