久々にUnityを触ってみました。
ボールをキューブにぶつけたときに、キューブが消滅してポイントが入ると動きです。
下準備
- 地面をプレーンで作成
- スフィア(Player)とキューブ(collier object)を出す
- プレーンの周りをキューブで囲んで壁にします。
Playerをキーボードで動かせるようにする。PlayerController.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
public class PlayerController : MonoBehaviour { // Define Rigidbody-Type variable rb Rigidbody rb; // Define speed as pablic as inspector public float speed = 1; // Start is called before the first frame updates void Start() { Debug.Log("Script starts"); // Get rigidbody component from this object. // あとで力を与える対象として使用する rb = GetComponent<Rigidbody>(); } // Update is called once per frame void FixedUpdate() { //Debug.Log("FixedUpdating"); // 矢印キーを押すと 変数moveHに格納する。変数宣言も一緒にやっている。 float moveH = Input.GetAxis("Horizontal"); float moveV = Input.GetAxis("Vertical"); // 新しいVector3型の値を作って、変数moveに代入する Vector3 move = new Vector3(moveH, 0, moveV); // Vector3型変数moveをオブジェクトに対する力として与える rb.AddForce(move * speed); } |
さらに、オブジェクトに接触したときに、接触したものを検知して、見えなくし、点数が加算されるコードをいれます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
public class PlayerController : MonoBehaviour { // Define Rigidbody-Type variable rb Rigidbody rb; int count; // Define speed as pablic as inspector public float speed = 1; // Start is called before the first frame updates void Start() { Debug.Log("Script starts"); // Get rigidbody component from this object. // あとで力を与える対象として使用する rb = GetComponent<Rigidbody>(); } // Update is called once per frame void FixedUpdate() { //Debug.Log("FixedUpdating"); // 矢印キーを押すと 変数moveHに格納する。変数宣言も一緒にやっている。 float moveH = Input.GetAxis("Horizontal"); float moveV = Input.GetAxis("Vertical"); // 新しいVector3型の値を作って、変数moveに代入する Vector3 move = new Vector3(moveH, 0, moveV); // Vector3型変数moveをオブジェクトに対する力として与える rb.AddForce(move * speed); } // オントリガーメソドを定義する void OnTriggerEnter(Collider other) { // otherはコライダー、セットアクティブでチェックを外す other.gameObject.SetActive(false); count += 1; Debug.Log(count); } } |
衝突オブジェクトのis Trigerはチェックを入れておいて、上記のOnTriggerが機能するようにします。
衝突オブジェクトはくるくる回るようにしておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
public class Rotator : MonoBehaviour { // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { this.transform.Rotate(new Vector3(15, 30, 45) * Time.deltaTime); } } |
カメラが、Playerをついてまわるようにします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
public class PlayerFollower : MonoBehaviour { // ゲームオブジェクトを入れるパブリック変数を定義しておく // 後でインスペクターからplayerオブジェクトを入れる public GameObject player; Vector3 offset; // Start is called before the first frame update void Start() { // 初期位置の差をoffsetとして得る offset = this.transform.position - player.transform.position; } // Update is called once per frame void LateUpdate() { // このスクリプトが適用されたオブジェクト(カメラ)の位置を // インスペクタで定義するゲームオブジェクトplayerに依存させる // this.transform.position = player.transform.position; // offsetを追加する this.transform.position = player.transform.position + offset; } } |
UIを追加します。UI Canvas Text をヒエラルキーへ追加します。
shift + alt +左クリックで 左上にTextをピン留めできます。
PlayerController.csへ得点を追加します。
モジュールUnityEngine.UIを追加
pubulic Text countTextを定義して、予め作っておいたcount変数を代入します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
using UnityEngine.UI; public class PlayerController : MonoBehaviour { // Define Rigidbody-Type variable rb Rigidbody rb; int count; public Text countText; // Define speed as pablic as inspector public float speed = 1; // Start is called before the first frame updates void Start() { Debug.Log("Script starts"); // Get rigidbody component from this object. // あとで力を与える対象として使用する rb = GetComponent<Rigidbody>(); count = 0; // UI canvasに入れられるのは文字だけ countText.text = "得点 : "+ count.ToString(); } // Update is called once per frame void FixedUpdate() { //Debug.Log("FixedUpdating"); // 矢印キーを押すと 変数moveHに格納する。変数宣言も一緒にやっている。 float moveH = Input.GetAxis("Horizontal"); float moveV = Input.GetAxis("Vertical"); // 新しいVector3型の値を作って、変数moveに代入する Vector3 move = new Vector3(moveH, 0, moveV); // Vector3型変数moveをオブジェクトに対する力として与える rb.AddForce(move * speed); } // オントリガーメソドを定義する void OnTriggerEnter(Collider other) { // otherはコライダー、セットアクティブでチェックを外す other.gameObject.SetActive(false); count += 1; Debug.Log(count); countText.text = "得点 : " + count.ToString(); } } |
public Textにはインスペクターから Canvas直下のTextオブジェクトをドラックアンドドロップで入れます。
2回繰り返すスクリプトは関数化します。
|
void SetCountText() { countText.text = "得点 : " + count.ToString(); } |
で、使うときはこうします。
|
SetCountText(); // 新メソド作成した |