Unityで玉転がしゲームをする

今日はUnityの公式のチュートリアルについて

翻訳しているサイトを見つけたので

そこを参考に勉強してみる。

 

翻訳元(Unity公式)

https://learn.unity.com/project/roll-a-ball-tutorial

翻訳サイト

https://baba-s.hatenablog.com/entry/roll-ball-tutorial

 

ここのサイトはいくつか翻訳してくれているので

しばらく参考にしよう。

 

今日は玉を転がしアイテムをとるゲームをする。

下のようなもの

f:id:sashimimayonezu:20200809010452p:plain

 

とりあえず床とボールを作る

ボールの動かし方は公式がスクリプト

作ってくれているのでそれを使う。

using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public float speed = 20; // 動く速さ

    private Rigidbody rb; // Rididbody

    void Start()
    {
        // Rigidbody を取得
        rb = GetComponent<Rigidbody>();
    }

    void Update()
    {
        // カーソルキーの入力を取得
        var moveHorizontal = Input.GetAxis("Horizontal");
        var moveVertical = Input.GetAxis("Vertical");

        // カーソルキーの入力に合わせて移動方向を設定
        var movement = new Vector3(moveHorizontal, 0, moveVertical);

        // Ridigbody に力を与えて玉を動かす
        rb.AddForce(movement * speed);
    }
}

まだ内容がちょっとわかってない・・・

次にカメラの位置関係もプログラムでしている。

アタッチじゃダメなのか?

 

そのあと壁と拾うアイテムを付けてゲームらしくする。

Prefab化で楽をするように。

 

アイテムと接触するときの判定にタグを使う手法があった

    // 玉が他のオブジェクトにぶつかった時に呼び出される
    void OnTriggerEnter(Collider other)
    {
        // ぶつかったオブジェクトが収集アイテムだった場合
        if (other.gameObject.CompareTag("Pick Up"))
        {
            // その収集アイテムを非表示にします
            other.gameObject.SetActive(false);
        }
    }

使いやすそうなので覚えておこう。

後UIでスコアとか文字の表示もスクリプトがあったので

参考にしておこう。

   // 玉が他のオブジェクトにぶつかった時に呼び出される
    void OnTriggerEnter(Collider other)
    {
        // ぶつかったオブジェクトが収集アイテムだった場合
        if (other.gameObject.CompareTag("Pick Up"))
        {
            // その収集アイテムを非表示にします
            other.gameObject.SetActive(false);

            // スコアを加算します
            score = score + 1;

            // UI の表示を更新します
            SetCountText ();
        }
    }

 

スコアの表現部分だけ抜き出す

using UnityEngine;
using UnityEngine.UI;

public class PlayerController : MonoBehaviour
{
 
    public Text scoreText; // スコアの UI
    public Text winText; // リザルトの UI

    private int score; // スコア

    void Start()
    {
        // UI を初期化
        score = 0;
        SetCountText();
        winText.text = "";
    }

    // 玉が他のオブジェクトにぶつかった時に呼び出される
    void OnTriggerEnter(Collider other)
    {
        // ぶつかったオブジェクトが収集アイテムだった場合
        if (other.gameObject.CompareTag("Pick Up"))
        {
            // その収集アイテムを非表示にします
            other.gameObject.SetActive(false);

            // スコアを加算します
            score = score + 1;

            // UI の表示を更新します
            SetCountText ();
        }
    }

    // UI の表示を更新する
    void SetCountText()
    {
        // スコアの表示を更新
        scoreText.text = "Count: " + score.ToString();

        // すべての収集アイテムを獲得した場合
        if (score >= 12)
        {
            // リザルトの表示を更新
            winText.text = "You Win!";
        }
    }
}

 

 Unityroomに公開しておきます

https://unityroom.com/games/rollaball22

 

 

https://help.hatenablog.com/entry/developer-option?_gl=1*ojnx55*_gcl_au*NzA5NzY1Mzc3LjE3MTA2NTgyODA.