DisplayVariables
class
名前空間:SilCilSystem.Components.Views
継承:UnityEngine.MonoBehaviour
変数アセットの値を表示するためのコンポーネントです。 実際の表示処理はIDisplayTextインターフェースに委譲し、 このコンポーネントは表示形式の指定や表示する値のアニメーション設定を行います。
スコアやタイムの表示はこれ1つで十分だと言えるようなものを目指しています。
設定項目
全体設定
type | name | description | note |
---|---|---|---|
PropertyBool | m_isBusy | 更新処理があったときはtrue | 数値のアニメーションが終わったタイミングを知りたいときなど |
string | m_format | 変数の値を代入する箇所を指定 | 変数設定のm_keyを{}で囲む |
変数アセットの個別設定
基本設定
type | name | description | note |
---|---|---|---|
string | m_key | 全体設定のm_formatで用いる識別用文字列 | 重複ないように設定 |
ReadonlyPropertyString | m_format | 変数の値の表示形式 | ToStringの引数 |
ScriptableObject | m_variable | 用いる変数アセット | ReadonlyでもVariableでも可、読取のみ使用 |
m_formatについてはC#のドキュメントを参考にしてください。
アニメーション設定
共通
type | name | description | note |
---|---|---|---|
ReadonlyPropertyFloat | m_duration | アニメーションの変化時間 | 0以下ならアニメーションなし |
InterpolationCurve | m_curve | 補間曲線 | イージングを用いたアニメーションに使用 |
bool | m_useInitial | Start時に特定の値を用いる場合はtrueに設定 | |
変数の型 | m_initialValue | Start時に用いる値 | m_useInitialがtrueの場合のみ使用 |
int型
type | name | description | note |
---|---|---|---|
FloatToInt.CastType | m_castType | floatからintへの変換方法の指定 | floatで補間してからintに変換するのに必要 |
使用例
例としてスコアの表示をしてみます。 ここでは、キーを押すとスコアが100上がることにします。
using UnityEngine;
using SilCilSystem.Variables;
public class TestScore : MonoBehaviour
{
[SerializeField] private VariableInt m_score = default;
private void Update()
{
if (Input.anyKeyDown)
{
// キーを押すたびに値を100増やす.
m_score.Value += 100;
}
}
}
変数アセットを作成して設定します。
次に、スコアをDisplayVariablesを用いて表示してみましょう。
- Textコンポーネント(TextMeshProでも可)と同じゲームオブジェクトにDisplayVariablesをアタッチして設定します。
- 全体設定のm_formatに”score: {score}”を入力します。
- m_intValuesにスコアの変数アセットを設定します。
- m_keyには”score”, m_formatには”0”を入力します。
実行すれば、変数アセットの値が表示されます。
アニメーションもさせてみましょう。 m_durationに0.5を入力すれば0.5秒で変数の値に変わってくれます。
実装
基本的にはループを回して置換しているだけです。
private void SetText()
{
string text = m_format;
foreach (var variable in m_variables)
{
// ループを回して置換.
text = text.Replace($"}", variable.Update()); // variable.UpdateでToStringを呼んでいる.
}
m_text.SetText(text);
}
テキストの表示については、IDisplayTextインターフェースを取得して使用しています。