はじめに
これらの通りにやって、若干使いづらかったのでFade用のスクリプトを書き換えました。
環境
- OS: Windows 11 Home
- バージョン: 21H2
- Unity Editer Version: 20203.27f1
どう使いづらい?
フェードアウトさせてから始まるシーンではフェードの濃さの変数であるRangeをinspectorから1にしておかないとならないが、そうすると編集時にも画面が真っ暗になって使いづらい。
解決策
FadeImage.cs と Fade.csを以下の通り書き換えました。
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class FadeImage : UnityEngine.UI.Graphic , IFade
{
[SerializeField]
private Texture maskTexture = null;
// [SerializeField, Range (0f, 1f)]
[Range (0f, 1f)] // SerializeFieldを削除
private float cutoutRange;
// ~~ 省略 ~~
}
using UnityEngine;
using System.Collections;
using UnityEngine.Assertions;
public class Fade : MonoBehaviour
{
IFade fade;
[SerializeField] bool StartFade; // start時にfadeを掛けるか.
float cutoutRange=0;
// void Start ()
void Awake () // StartからAwakeに変更
{
Init ();
fade.Range = cutoutRange;
}
// コメントアウトしました
// void OnValidate ()
// {
// Init ();
// fade.Range = cutoutRange;
// }
void Init ()
{
fade = GetComponent<IFade> ();
if (StartFade == true)
{
cutoutRange = 1;
} else {
cutoutRange = 0;
}
}
// ~~ 省略 ~~
}
まず、FadeImage.csでなぜか0か1以外の値でしか保存できないRangeパラメータはinspectorから更新する必要はないため、Seriarizefield属性を削除しちゃいました。
スタート時にフェードを1にするか0にするかは、FadeコンポーネントのstartFadeをtrueにするかどうかで管理しています(これは飲用元の設計)。ただ、inspectorから変更すると、Onvalidate関数が反応して、真っ暗になってしまうため、Fade.csのOnValidate関数を削除しました。
また、Fade.csのStart関数内にあった記述ですが、シーン遷移をした後にオブジェクトが参照できないと言われることがあったので、Awake関数に移行しました。
以上,3点を変更することで、画面が真っ暗にならずに作業できるようになりました。
おわりに
根本的な解決ではないし、将来困りそうな気がしますが、私の技術力ではここが時間的に限界。
もっとスマートな解決策があれば、ぜひ教えてください。