HIROMARTBLOG

Unity、Cocos2d-xのこととか書けたらいいですね。

プログラミング初心者でも簡単!Unity5で3Dシューティングゲーム開発!!~敵の作成~

      2015/05/31

今回は、敵の作成を行います。

準備

敵機体のインポート

敵の機体のインポートをしてください。

自分は、下記のモノを使いました。

これでなくても、なんでもいいですよ。

3dShooting55

 

Scriptの追加

[MyFolder]→[Script]の中に[EnemyControl]を追加してください。

これに敵の動きなどを追加して書いていきます。

敵、3Dモデルの設定

まずは、インポートした3Dモデルを見てみましょう。

3dShooting56

宇宙戦闘機と比べた時に、小さいですね。

なので、scaleをいじっていい感じの大きさに変えましょう。

scaleの変更

それぞれ、自分がインポートした3Dモデルに合わせていじってください。

自分と同じ3Dモデルで行っている場合は、scale[3]くらいがちょうどいいと思います。

Rotateの変更

次は、最初の回転角度をいじってみましょう。

敵なので、基本的にプレイヤーが動かす宇宙戦闘機とは対面になっています。

なので、最初の角度から180度回転させてみましょう。

[Inspector]→[Rotate]のY軸を180と入力してください。

これで対面になりました。

3dShooting57

EnemyControl


using UnityEngine;
using System.Collections;

public class EnemyControl : MonoBehaviour {

public GameObject EnemyBullet;
float Z_Speed = 0.7f;
float intervalTime;
// Use this for initialization
void Start () {
intervalTime = 0;
}

// Update is called once per frame
void Update () {

transform.Translate(0, 0, 1 * Z_Speed);

Quaternion quat = Quaternion.Euler(0, 180, 0);

intervalTime += Time.deltaTime;
if (intervalTime >= 0.3f) {
intervalTime = 0.0f;
Instantiate(EnemyBullet, new Vector3(transform.position.x, transform.position.y, transform.position.z), quat);
}

}
}

だいたい、StarFighterと同じだと思います。

違いは、つねにこっち側に動くようになっている事。

何も押さなくても、弾が発射されるように設定されている事です。

EnemyBulletには、宇宙戦闘機に追加した弾と色違いのものを選んで敵のモデルと同じように180度回転させて

宇宙戦闘機の弾に追加したScript[Bullet]と同じモノを追加して、Prefab化したモノを追加してください。

3dShooting58 3dShooting59

敵の出現位置

次は、敵の出現位置を設定します。

今回は、宇宙戦闘機の前に出るような設定にしたいと思います。

これで、宇宙戦闘機が前に前に進んでも敵はいい感じの位置から出続けてくれます。

敵のPrefab化

まずは、敵をPrefab化しましょう。

作成した敵を[MyFolder]→[Prefab]の中に入れてください。

StarfighterControlにコードの追加

次に、StarFighterControlに敵のPrefabを出現させるコードを追加します。


using UnityEngine;
using System.Collections;

public class StarfighterControl : MonoBehaviour {

float X_Speed = 1;
float Z_Speed = 1;

public GameObject Prefab;
public GameObject EnemyObject;
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);
}
}

Quaternion quat = Quaternion.Euler(0, 180, 0);

enemyintervalTime += Time.deltaTime;
if (enemyintervalTime >= 4.0f) {
enemyintervalTime = 0;
Instantiate(EnemyObject, new Vector3(transform.position.x, transform.position.y, transform.position.z + 200),quat);
}

}
}

追加したのは


</pre>
<pre>Quaternion quat = Quaternion.Euler(0, 180, 0);

enemyintervalTime += Time.deltaTime;
if (enemyintervalTime >= 4.0f) {
enemyintervalTime = 0;
Instantiate(EnemyObject, new Vector3(transform.position.x, transform.position.y, transform.position.z + 200),quat);
}

です。

また、これに使った新しい変数です。

[ enemyintervalTime]が敵が出てくる間隔です。

49行目の[if (enemyintervalTime >= 4.0f)]で4秒毎に敵を生成するという感じにしています。

出現位置は、[Instantiate(EnemyObject, new Vector3(transform.position.x, transform.position.y, transform.position.z + 200),

quat);]で設定しています。

Z軸に+200して、宇宙戦闘機のZ軸の+200前に出るように設定されています。

また、宇宙戦闘機の[Inspector]→[StarFighterControl]に[EnemyObject]が追加されています。

これに、先ほど作成してもらった敵のPrefabを追加してください。

3dShooting60

これで、実行すると4秒毎に前方に敵が生成されるようになったと思います。

まとめ

今回は、敵を作成してそれを出現されるところまでやりました。

前回までに行った事と同じ事が多かったので説明はかなり省かて書いてみました。

今回の記事で詰まるところがあれば、これまでの記事を見なおしてみてください。

きっと詰まったところと同じような事を行っていると思います。

次回は、弾が敵に当たるようにすること、敵の弾が当たるようにする事などを書いていきます。

では。

 - IT, Unity , , , ,

広告

広告

Comment

  1. fugta より:

    はじめまして。
    タイトル通りの初心者がこちらのシリーズを元にUnity挑戦してみてます。
    有用な記事をありがとうございます。

    ただ一通り最後まで真似して作ってみて、一応動くようには出来たのですが
    ゲームスタートすると敵機が180度回転せず後ろ向きに出現してしまうんですよ。
    Prefab化する前のDroidFighterのTransformをいじっても、
    Prefab内のTransformをいじってみても反映されないんですが
    手順を間違えてるんでしょうかね?
    HIROさんの方では問題なく表示されていますでしょうか?

    • HIRO より:

      指摘ありがとうございます。
      記事を修正しました。

      修正した部分は、[StarfighterControl.cs]の敵出現位置です。
      ここで、敵の出現時の角度も設定するようにしました。

      Quaternion quat = Quaternion.Euler(0, 180, 0);

      そして、[EnemyControl.cs]の敵の進む方向も逆にするために
      transform.Translate(0, 0, -1 * Z_Speed);をtransform.Translate(0, 0, 1 * Z_Speed);
      に修正しました。

      これでもう一度試してみてください。

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

  関連記事

簡単オンラインゲーム開発!!UnityとPhotonCloudで簡単実装~オブジョクトの同期~

前回の記事では、同期するオブジョクトの生成を行ってもらいました。 今回は、オブジ …

Unity5にVisual Studio Tools for Unity ( UnityVS ) を追加する方法

最近リリースされた、Unity5では、今までのUnity4.6などと同じ方法では …

簡単オンラインゲーム開発!!UnityとPhotonCloudで簡単実装~カメラを追随させる~

前回の記事でアニメーションの同期を行いました。 今回の記事では、カメラをそれぞれ …

プログラミング初心者でもゲームが作れる!「Unity5」のインストール方法

今日、アップデートされたばかりの「Unity5」のインストールの方法を紹介してい …

プログラミング初心者でも簡単!Unity5で3Dシューティングゲーム開発!!~ソースファイルの作成とゲームオブジェクトへの追加~

前回の記事で AssetStoreの使い方を書いたと思います。 今回から、少しだ …

プログラミング初心者でも簡単!Unity5で3Dシューティングゲーム開発!!~衝突判定の設定~

今回は、衝突判定について書いていきます。 弾と機体があたった時に、判定をして機体 …

プログラミング初心者でも簡単!Unity5で3Dシューティングゲーム開発!!~細かな設定~

前回までで、だいたいのゲームシステムは出来たいと思います。 今回は、細かな設定を …

プログラミング初心者でも簡単!Unity5で3Dシューティングゲーム開発!!~カメラの設定~

前回の記事では、宇宙戦闘機から弾が発射するようになりました。 今回は、カメラの設 …

Unity Adsの使い方・導入方法~Unityで作ったゲームで広告収入~

今回は、Unity Adsの使い方・導入方法を書いていきます。   目 …

プログラミング初心者でも簡単!Unity5で3Dシューティングゲーム開発!!~弾の作成とそれのPrefab化~

前回の記事では、宇宙戦闘機を動かすところまでやったと思います。 今回は、その宇宙 …