目次
経緯
Unityでゲームを作っていて、スコアが増えると、背景色が変わる演出ができないか、今回やって見ました。
” Mathf.Lerp()”を使う
まず、プログラムを書きます。ヒエラルキーウィンドウに「背景」があり、”GameDitector”というスクリプトの中に”Score”をカウントする関数がある想定です。
using UnityEngine; public class BackgroundColorChanger : MonoBehaviour { public GameDitector gameDirector; private SpriteRenderer spriteRenderer; // Start is called before the first frame update void Start() { gameDirector = GameObject.Find("GameDirector").GetComponent<GameDitector>(); spriteRenderer = GetComponent<SpriteRenderer>(); // SpriteRenderer コンポーネントを取得 } // Update is called once per frame void Update() { int score = gameDirector.GetScore(); float ratio = Mathf.Min(score / 1000f, 1f); // 最大値を1に制限 float newGreenValue = Mathf.Lerp(1f, 0f, ratio); float newBlueValue = Mathf.Lerp(1f, 0f, ratio); Color newColor = new Color(1f, newGreenValue, newBlueValue, 1f); spriteRenderer.color = newColor; // 背景画像の色を変更 } }
という感じで「BackgroundColorChanger」という新しくスクリプトを作ります。
これをヒエラルキーウィンドウの”背景”のアタッチします。
その前に”GetScore()”という関数を作らなければならないので、GameDitectorスクリプトにGetScore()を追加します。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using TMPro; public class GameDitector : MonoBehaviour { public TextMeshProUGUI ScoreObject; public int Score = 0; // Start is called before the first frame update void Start() { this.ScoreObject = GameObject.Find("Score").GetComponent<TextMeshProUGUI>(); } public void additme() { //itemタグのついたオブジェクトを検索する GameObject[] items = GameObject.FindGameObjectsWithTag("item"); this.Score ++; //スコアを更新する ScoreObject.text = "Score: " + Score.ToString(); } public int GetScore() //GetScore() メソッド追加 { return this.Score; } }
こんな感じで、GetScore()を追加します。
すると、スコアが増えるにつれて、赤くなっているのがわかると思います。
今回はGとBを変える仕様ですが、もちろんRもできるので、試して見てください。
参考になれば幸いです。
ここまで読んでいただきありがとうございました。