では今まで得た知識を利用して、コードを理解しておきましょう。
今回解説するコードは以下のとおりです。
YokeGame/Player.cs at main · g-zen/YokeGame
using UnityEngine;
using UnityEngine.UI;
public class Player : MonoBehaviour
{
public GameObject gameOverUI;
public Text scoreUI;
private int score = 0;
// Start is called before the first frame update
void Start()
{
Debug.Log("Hello");
gameOverUI.SetActive(false);
}
// Update is called once per frame
void Update()
{
Vector3 mousePos = Input.mousePosition;
mousePos.z = 10;
transform.position = Camera.main.ScreenToWorldPoint(mousePos);
scoreUI.text = score.ToString();
}
private void OnTriggerEnter2D(Collider2D collision)
{
Debug.Log("Hit!!!");
if(collision.tag == "Renga")
{
// 障害物にあたったときの処理
gameOverUI.SetActive(true);
Destroy(gameObject);
}
if(collision.tag == "Coin")
{
// コインに当たったときの処理
Debug.Log("Get Coin!!!");
score = score + 1;
Debug.Log(score);
}
}
}
ではまずはStart()の中身について解説していきます。
void Start()
{
Debug.Log("Hello");
gameOverUI.SetActive(false);
}
Debug.Log();はコンソールに文字を表示するメソッドです。 更に細かく言えば、DebugクラスのLogメソッドを実行する、という意味になります。
gameOverUI.SetActive();は変数gameOverUIに格納されたゲームオブジェクトの表示非表示を変更するために使います。
次はUpdate()の中身について解説していきます
Update()は、毎フレーム実行される処理のことでしたね。
void Update()
{
Vector3 mousePos = Input.mousePosition;
mousePos.z = 10;
transform.position = Camera.main.ScreenToWorldPoint(mousePos);
scoreUI.text = score.ToString();
}
毎フレームごとにマウスの位置を取得し、mousePos変数に代入します。 その後mousePosのz座標を「10」にしているわけですが、これは「おまじない」です。
どうもmousePosが0の状態だと、正確な位置を取得できないようです。 こればかりはUnityの仕様なので、こうやるものだと割り切ってください。
mousePosはスクリーン座標なので、ワールド座標に一旦変換する必要があります。
スクリーン座標をワールド座標に変換するためにはCameraオブジェクトの「ScreenToWorldPoint()」メソッドを使う必要があります。
この中にスクリーン座標を入れると、カメラから見たワールド座標に変換してくれます。 カメラが遠ざかると同じスクリーン座標でも違うワールド座標になるはずです。
なお、今回はCameraオブジェクトを「Camera.main」で取得しています。 これを使えば、MainCameraタグのついたカメラを取得できます。
あとはscoreUI.textにスコア変数を代入して、スコアUIにスコアを表示しています。 なお、scoreUI.textはstring型のため、int型をそのまま入れることが出来ません。 だから、score.ToString()でスコアをstring型にする必要があるわけです。