今日はUnityの公式のチュートリアルについて
翻訳しているサイトを見つけたので
そこを参考に勉強してみる。
翻訳元(Unity公式)
https://learn.unity.com/project/roll-a-ball-tutorial
翻訳サイト
https://baba-s.hatenablog.com/entry/roll-ball-tutorial
ここのサイトはいくつか翻訳してくれているので
しばらく参考にしよう。
今日は玉を転がしアイテムをとるゲームをする。
下のようなもの
とりあえず床とボールを作る
ボールの動かし方は公式がスクリプトを
作ってくれているのでそれを使う。
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