目次
はじめに
ゲームの演出において、「スコアが上がると背景の色が変化する」という仕掛けは、
プレイヤーの達成感を演出する効果的な手段になります。
私自身もUnityでゲームを作っている中で、スコアが増えると背景色が徐々に変化するようにしたいと考え、
今回 Mathf.Lerp()
を活用してその仕組みを実装してみました。
実現したいこと
- スコアが上がるごとに背景の色が徐々に赤くなる
- スコアが一定値(例:1000)に達したら完全に赤に変化
- リアルタイムで色が変化する演出を
Update()
内で処理
使用する関数:Mathf.Lerp()
Mathf.Lerp(a, b, t)
は、数値a
からb
への補間を行う関数です。t
の値が 0 なら a
、1 なら b
を返し、間の値で滑らかに補間してくれます。
この関数を使えば、スコアの値に応じて色成分(RGB)を連続的に変化させることができます。
実装手順①:背景色を変えるスクリプト
まず、BackgroundColorChanger.cs
というスクリプトを作成し、背景オブジェクトにアタッチします。
using UnityEngine;
public class BackgroundColorChanger : MonoBehaviour
{
public GameDitector gameDirector;
private SpriteRenderer spriteRenderer;
void Start()
{
gameDirector = GameObject.Find("GameDirector").GetComponent<GameDitector>();
spriteRenderer = GetComponent<SpriteRenderer>();
}
void Update()
{
int score = gameDirector.GetScore();
float ratio = Mathf.Min(score / 1000f, 1f); // 最大1までに制限
float newGreenValue = Mathf.Lerp(1f, 0f, ratio); // Gをだんだん0へ
float newBlueValue = Mathf.Lerp(1f, 0f, ratio); // Bも同様に0へ
Color newColor = new Color(1f, newGreenValue, newBlueValue, 1f); // 赤に近づく
spriteRenderer.color = newColor;
}
}
実装手順②:スコアを取得するGetScore()メソッドを追加
背景色の変化にはスコアが必要なので、GameDitector.cs
に GetScore()
メソッドを追加します。
using UnityEngine;
using TMPro;
public class GameDitector : MonoBehaviour
{
public TextMeshProUGUI ScoreObject;
public int Score = 0;
void Start()
{
this.ScoreObject = GameObject.Find("Score").GetComponent<TextMeshProUGUI>();
}
public void additme()
{
GameObject[] items = GameObject.FindGameObjectsWithTag("item");
this.Score++;
ScoreObject.text = "Score: " + Score.ToString();
}
public int GetScore() // ← これが重要
{
return this.Score;
}
}
背景へのアタッチ手順
- ヒエラルキーで
背景
オブジェクトを選択 BackgroundColorChanger.cs
スクリプトをアタッチ- インスペクタで「GameDirector」オブジェクトを
gameDirector
にドラッグ&ドロップ
これで、スコアに応じて背景が赤く変化していく演出が完成します。
応用ポイント
- 赤に変化させるのではなく、青や緑に変化させることも可能です
Mathf.Lerp()
の引数を調整すれば、明るさや透明度を滑らかに変化させることもできます- スコアだけでなく、HPや時間など別の要素に応じた色変化にも応用できます
まとめ
Unityでは Mathf.Lerp()
を使えば、スコアや数値の増加に応じてオブジェクトの色をスムーズに変化させることができます。
今回の例では、スコアが1000になるまでに背景が白から赤に徐々に変化する演出を実装しました。
演出次第でゲームの印象が大きく変わるので、ぜひ自分のゲームにも応用してみてください。
少しでも参考になれば幸いです。