Unity 練習問題 5


Unity練習問題 問5

UnityのエディターやC#スクリプトのオリジナル問題を紹介していきます。

第5問はstatic変数ついての問題です。


スクリプト

using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;

public class Practice_05 : MonoBehaviour {

	static int HP = 100;
	       int MP = 100;

	void Start () {
		Debug.Log("HP = " + HP);
		Debug.Log("MP = " + MP);
	}

	void Update () {
		if (Input.GetKeyDown("s")) {
			HP -= 10;
			MP -= 10;
			SceneManager.LoadScene("P05");
		}
	}
}

問題

“MainCamera”に”Practice_05″スクリプトを適用し、シーン名”P05″として保存した。
シーン”P05″を再生し、”S”キーを5回押したときにConsoleに出力される結果として正しい組合せを1つ選択しなさい。
(“S”キーを押すとシーンが再読み込みされます。)

  1. 「HP = 100」、「MP = 100」
  2. 「HP = 50」、「MP = 50」
  3. 「HP = 100」、「MP = 50」
  4. 「HP = 50」、「MP = 100」
  5. 「HP = 10」、「MP = 10」
  6. 何も出力されない。

正解 4

クラスブロックで宣言された変数をメンバー変数といい、static修飾子をもつ変数は、静的メンバー変数(static変数)といいます。
通常のメンバー変数は、シーン読み込み時に値が自動的に初期化されます。
したがって、変数”MP”はシーンが読み込まれるたびに、値が100にリセットされます。

static変数は、自動的に初期化されないため、ゲーム実行中は常に値が保持されます。
したがって、変数”HP”はマイナス10された値がシーン間で持ち越されるため、Sキーが5回押されたとき(6回目のシーン読み込み時)には、値が50になります。

このように、オフラインゲームでシーン間で値を保持したいときなどは、static変数が便利です。
しかし、static変数はその性質上、他クラスからのアクセスが容易であるため、思わぬタイミングで値が変更されてしまう可能性を考慮しなければなりません。便利ですが、使いすぎると後々取集がつかなくなるため、static変数は必要以上に作成しないように注意しましょう。

次の問題 前の問題


← Unity練習問題 一覧

  • このエントリーをはてなブックマークに追加

PAGE TOP