UnityでUFOゲームをつくろう
ここで言うUFOとは一般に言われている未確認飛行物体という直接の意味でなく、他人との干渉を避け続けた結果、地球の引力を離れ空中へと飛び立っていった自意識のことを指し、それをゲームと言う閉鎖的な空間に持ち込むことによって逃げ場を失った自意識は……。
えぇ……、ちょっと何を言っているのかわかりませんね。
そんなわけで(?)、つづきをやっていきます
前編はこちら
inujini.hatenablog.com
そうしたわけで、後編開始です。
まずは何はともあれ、収集オブジェクトを設置します。
そして、オブジェクトだと強調するために回転するだけのスクリプトを……。
using UnityEngine; using System.Collections; public class CompleteRotator : MonoBehaviour { //Update はすべてのフレームで呼び出されます。 void Update () { //ゲームオブジェクトの transform を回転します。45 度の角度でアタッチされます。最後のフレームからの経過時間を考慮します。 transform.Rotate (new Vector3 (0, 0, 45) * Time.deltaTime); } }
収集用のスクリプトもセットで
プレイヤー_追記01
//このオブジェクトがトリガーコライダーと重なるときはいつでも、OnTriggerEnter2D が呼び出されます。 void OnTriggerEnter2D(Collider2D other) { //与えられた Collider2D パラメーター "other" が "PickUp" とタグされていないか確認し、そうであれば... { other.gameObject.SetActive(false); } }
これを動かしてみるとこうです。3Dでやったやつと同じですね……。
そしたら、最後に収集カウンタをつけておわりっ!! 前後編に分ける必要なかった。
プレイヤー_追記02
using UnityEngine; using System.Collections; //これを加えると、Text を含む UI 名前空間のメンバーにアクセスできるようになります。 using UnityEngine.UI; public class CompletePlayerController : MonoBehaviour { public float speed; //プレイヤーの移動スピードを格納する Float 変数 public Text countText; //収集したアイテムの数を表示する UI Text コンポーネントへの参照を格納します。 public Text winText; //「勝ちました!」メッセージを表示する UI Text コンポーネントへの参照を格納します。 private Rigidbody2D rb2d; //2D Physics に必要な Rigidbody2D コンポーネントへの参照を格納します private int count; //集めたアイテムの数を格納する Int // イニシャライゼーションにこれを使います void Start() { //Rigidbody2D コンポーネントへの参照を取得、格納して、 Rigidbody2D コンポーネントへアクセスできるようにします。 rb2d = GetComponent<Rigidbody2D> (); //合計を 0 に イニシャライズします。 count = 0; //開始時にはまだ、勝っていないので、winText を空の文字列にイニシャライズします。 winText.text = ""; //現在の合計数のテキストを更新するSetCountText 関数を呼び出します。 SetCountText (); } //FixedUpdate は決められた間隔で呼び出され、フレームレートとは関係ありません。物理演算のコードをここに置きます。 void FixedUpdate() { //現在の水平入力を float moveHorizontal に格納します。 float moveHorizontal = Input.GetAxis ("Horizontal"); //現在の垂直入力を float moveVertical に格納します。 float moveVertical = Input.GetAxis ("Vertical"); //2 つの格納 floats を使って新しい Vector2 変数の動きを作成します。 Vector2 movement = new Vector2 (moveHorizontal, moveVertical); // movement に speed を乗じたものを伴う Rigidbody2D rb2d の AddForce 関数を呼び出します。 rb2d.AddForce (movement * speed); } //このオブジェクトがトリガーコライダーと重なるときは常に OnTriggerEnter2D を呼び出します。 void OnTriggerEnter2D(Collider2D other) {
ボール転がしと同じことするのが嫌だったんで、勝手に改造して残り時間表示するようにしました。ガワがいいからこれだけでそれっぽいゲームに見える。そしてテキストの紐づけをしなくて、3D のときと同じくエラーで怒られた(以前と同じ轍を踏む)。
おわりに
今回のやつはコメントも細かく書いてあって分かりやすかった。3Dとやっていること同じですけどね…。先にこっちをやればよかったかもしれない。そして前後編に分けるほどの内容がないというね。だけど、画像いっぱい貼り付けて一つの記事にするのもあれだし。難しいところ。
さて、次やるとしたらシューティングのチュートリアルかなあ……。ほぼアセットでできそうな気がしてあれだけど時間とかかけずにできそうな感じが魅力的だ。