では今まで得た知識を利用して、コードを理解しておきましょう。

今回解説するコードは以下のとおりです。

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型にする必要があるわけです。