前回までで、だいたいのゲームシステムは出来たいと思います。
今回は、細かな設定をしていきたいと思います。
宇宙戦闘機の移動制限
今のままだと、横移動するとカメラからフレームアウトしてしまいます。
なので、カメラから出ないように宇宙戦闘機に移動制限をつけたいと思います。
StarfighterControlを変更します。
using UnityEngine;
using System.Collections;
public class StarfighterControl : MonoBehaviour {
float X_Speed = 1;
float Z_Speed = 1;
public GameObject Prefab;
public GameObject EnemyObject;
public GameObject Explosion;
float intervalTime;
float enemyintervalTime;
// Use this for initialization
void Start() {
intervalTime = 0;
enemyintervalTime = 0;
}
// Update is called once per frame
void Update() {
float vertical = Input.GetAxis("Vertical");
float horizontal = Input.GetAxis("Horizontal");
if (Input.GetKey("up")) {
transform.Translate(0, 0, vertical * Z_Speed);
}
if (Input.GetKey("down")) {
transform.Translate(0, 0, vertical * Z_Speed);
}
if (Input.GetKey("left")) {
transform.Translate(horizontal * X_Speed, 0, 0);
}
if (Input.GetKey("right")) {
transform.Translate(horizontal * X_Speed, 0, 0);
}
intervalTime += Time.deltaTime;
if (Input.GetKey("space")) {
if (intervalTime >= 0.1f) {
intervalTime = 0.0f;
Instantiate(Prefab, new Vector3(transform.position.x, transform.position.y, transform.position.z), Quaternion.identity);
}
}
// プレイヤーの座標を取得
Vector3 pos = transform.position;
pos.x = Mathf.Clamp(transform.position.x, -35, 35);
transform.position = pos;
enemyintervalTime += Time.deltaTime;
if (enemyintervalTime >= 4.0f) {
enemyintervalTime = 0;
Instantiate(EnemyObject, new Vector3(Random.Range(-35.0f, 35.0f), transform.position.y, transform.position.z + 200), Quaternion.identity);
}
}
void OnTriggerEnter(Collider coll) {
if (coll.gameObject.tag == "EnemyBullet") {
Instantiate(Explosion, new Vector3(transform.position.x, transform.position.y, transform.position.z), Quaternion.identity);
Destroy(this.gameObject);
GameObject.Find("Main Camera").GetComponent<GameControl>().gameFlag = false;
}
}
}
52行目で、宇宙戦闘機のTransformのX軸を制限する処理を入れています。
自分の場合では、プラスマイナス35でいい感じにカメラ内に納まります。
いろいろ数値をいじって、自分に合うようにしてみてください。
敵の出現位置をランダムにする
今、敵は宇宙戦闘機の前にしか出てこないと思います。
これでは、ゲーム性があんまりないですね。(ヾノ・∀・`)ナイナイ
なので、敵の出現位置をランダムに変えたいと思います。
先ほど変えた、CameraControlの内容をまた変えます。
上に書いたのにもう追加しています。
59行目の[Instantiate(EnemyObject,new Vector3(Random.Range(-35.0f, 35.0f), transform.position.y, transform.position.z + 200), Quaternion.identity);]が少し変化しています。
敵の出現位置のX軸をプラスマイナス35にしています。[Random.Range(-35.0f, 35.0f)]
これで、敵が宇宙戦闘機の前だけではなくて、プラスマイナス35の範囲でランダムに出ます。
爆発エフェクトを削除する
次は、爆発エフェクトを削除する処理を追加していきます。
今だと、敵をたくさん倒すと、[Hierarchy]タブがこのようにたくさん爆発エフェクトのものが溜まっていきます。
これを溜まらないように消したいと思います。
[Script]フォルダの中に[ExplosionControl]というソースファイルを追加してください。
using UnityEngine;
using System.Collections;
public class ExplosionControl : MonoBehaviour {
// Use this for initialization
void Start () {
Destroy(this.gameObject, 5);
}
}
弾の処理と同じですね。
爆発エフェクトが生成されて、5秒後に消えるというものです。
これを、[Prefab]フォルダ内にある爆発エフェクトのPrefabに追加してください。
これで、爆発エフェクトが[Hierarchy]タブにたまらなくなりました。
まとめ
これで、[3Dシューティングゲーム]の作り方の記事を終えたいと思います。
どれくらいの人が読んでくれたかわかりませんがありがとうございました!!
読んでいた人だとわかるかと思いますが、途中から結構めんどくさくなってしまっていて、適当な部分があったと思います。
最初は、記事に合わせ自分も作っていたのですが、それだと時間が何倍もかかってしまい、大変だったので、
まずは、ゲームを完成させて、記事を書いていくスタイルに途中から変えました。
その影響で、もしかしたら記事の通りにやっても動かないなどがあったかもしれません。
申し訳ないです。
この記事分まで、追加してもらえればたぶん動くと思います。
後日、GitHubというものに自分が書いたコードをすべてアップロードして、誰でもダウンロード出来るようにしておくので、
興味がありましたら、ダウンロードして見てください。
10記事の長い付き合いありがとうございました。
今後は、UnityやCocos2dxなどで、使えそうな便利機能を見つけたりしたら更新していこうと思います。
では。
GitHubで、ダウンロード出来るようになったらまたブログ内で告知します。




コメント
スペースバーでプレイヤーの弾を出し続けてしばらくすると、プレイヤーが弾を出さなくなります。
原因がわかりません。
スペースを押したときに[Hierarchy]にはオブジェクトが増えていますか?