Unity

Unityで3Dシューティングアクションを作ろう③

投稿日:2019年6月4日 更新日:

今回やること

  • 敵キャラの作成
  • 敵の攻撃
  • 敵がプレイヤーに向かってくるようにする
  • 敵のダメージ処理

敵キャラの作成

敵の攻撃

Enemyスクリプトには一番上のusing~の部分にも記入します。

using~の記入内容

using~の説明

using UnityEngine.AI;

この後に敵キャラクターにつけるNavMeshAgentを使用する場合につけます。
NavMeshAgentとは敵キャラクターの動きをつけやすくするもので、つけることによって
障害物やステージ内の行ける場所を自動で判別して避けてくれるようになります。

変数を宣言する部分の記入内容

変数を宣言する部分の説明

public GameObject target;

敵が追従するターゲットを定義します。
今回はプレイヤーに向かってくるようにするのでプレイヤーが該当します。

NavMeshAgent agent;

NavMeshAgentを使うのでagentという名前をつけて定義しています。
もちろん名前は何でも良いです。

Animator animator;

Animatorも使うので定義しています。
Playerスクリプトの時と同じです。

public GameObject Enemyattack;

敵が攻撃する時のエフェクトを定義しています。

public Transform enemy;

敵の座標を定義しています。後々敵の攻撃エフェクトや敵のやられエフェクトを
敵のいる場所に出現させるためです。

void Startの記入内容

void Startの説明

agent = GetComponent();

agentにNavMeshAgentの値を代入します。

animator = GetComponent();

同様にanimatorにAnimatorの値を代入します。

void Updateの記入内容

void Updateの説明

agent.destination = target.transform.position;

NavMeshAgentの目的地をtargetの座標に決めています。

衝突判定の内容

衝突判定の説明

void OnTriggerEnter(Collider collision)

衝突判定を定義しています。オブジェクトがオブジェクトに衝突した時の処理は全部ここに書きます。
因みに書き方は
void OnTriggerEnter(Collider 変数の名前)
で始めて{}で閉じます。

if (collision.gameObject.tag == “Player”)

衝突したオブジェクトのタグがPlayerなら…です。
今回はプレイヤーの当たり判定に敵の当たり判定が衝突した場合に敵の攻撃が開始します。

StartCoroutine(“EnemyAttack”);

後に記述するEnemyAttackコルーチンを開始します。

コルーチンの内容

コルーチンの説明

IEnumerator EnemyAttack()

EnemyAttackコルーチンを定義します。

animator.SetBool(“Attack”, true);

Attack変数をtrueにします。

yield return new WaitForSeconds(0.05f);

0.05秒待ちます。

GameObject Enemyattacks = GameObject.Instantiate(Enemyattack) as GameObject;

Enemyattackを複製して複製されたEnemyattackをEnemyattacksと定義しています。

Enemyattacks.transform.position = enemy.position;

Enemyattacksの生成場所をenemyの場所にしています。

animator.SetBool(“Attack”, false);

Attack変数をfalseにします。

Destroy(Enemyattacks.gameObject, 1);

Enemyattacksを1秒後に消します。

完成形のスクリプト

敵がプレイヤーに向かってくるようにする

テストプレイをしてみると…

敵が主人公に向かって近づいてきて攻撃してきます。

敵のダメージ処理

更にEnemyスクリプトに追記していきます。

変数を宣言する部分の追記内容

変数を宣言する部分の説明

public GameObject Explosion;

敵を倒した時に出現させる爆発を定義しています。

衝突判定の記入内容

衝突判定の説明

void OnTriggerEnter(Collider collision)

衝突判定を定義しています。オブジェクトがオブジェクトに衝突した時の処理は全部ここに書きます。
因みに書き方は
void OnTriggerEnter(Collider 変数の名前)
で始めて{}で閉じます。

if (collision.gameObject.tag == “Ball”)

衝突した際のオブジェクトについているタグがBallだったらという意味です。この場合はプレイヤーが飛ばす弾を指します。

GameObject Explosions = GameObject.Instantiate(Explosion) as GameObject;

Explosionを複製して複製されたExplosionをExplosionsと定義しています。

Explosions.transform.position = enemy.position;

Explosionsの生成場所をenemyの場所にしています。

Destroy(this.gameObject);

このオブジェクトを消しています。
このオブジェクトとはスクリプトを貼り付けているオブジェクトなので敵を指しています。

Destroy(Explosions.gameObject, 1);

Explosionsを1秒後に消します。爆発のエフェクトが出続けると変なので消しています。

完成形のスクリプト

追記内容は※5と表示しています。

テストプレイをしてみると…


プレイヤーが弾を発射し、それが敵に当たったら倒せました♪

続きはこちら

このサイトについて

ここには、自己紹介やサイトの紹介、あるいはクレジットの類を書くと良いでしょう。

検索

このサイトについて

ここには、自己紹介やサイトの紹介、あるいはクレジットの類を書くと良いでしょう。

検索

-Unity

執筆者:


comment

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

Unityでスマホ対応のVRを作ろう

今回やること VR空間の宝島を冒険して宝を探すゲームをUnityで作ります バージョンは2018でやっていますが恐らく他のバージョンでも問題ないと思います VR用のカメラを入れる UnityRemot …

no image

コンボ攻撃

アニメーションの読み込み、アニメーションの名前の変更、アニメーションの遷移の設定 アニメーションの遷移の条件の設定 スクリプトの入力

Unityで制限時間や得点を表示する

Score&Time もくじ 得点を表示する 制限時間を表示する 得点を表示する 文字を作成 Create → UI → Textをおします Canvasの横の▶をおし、Tex …

no image

UnityRemoteのダウンロードと設定

PCとスマホを接続してお手軽にVRを楽しんだり実機でテストプレイするにはUnityRemoteというアプリが必要です UnityRemoteはPCと接続してUnityでテストプレイすると画面をスマホに …

no image

Scratch → Unity対応表を使って迷路ゲームを作ってみよう

今回作るゲーム 今回やることの説明 こんな感じの迷路ゲームを作っていきます。 今回はキャラの移動を実装していきます。 それ以外の要素はパッケージに入っているので、 パッケージのPlayerスクリプトに …

ゲタバコ倶楽部へようこそ

  • 75145総閲覧数:
  • 130今日の閲覧数:
  • 52850総訪問者数:
  • 85今日の訪問者数:

住所
Akita,Japan

営業時間
月~日: 10:00 AM – 10:00 PM

このページはゲタバコ先生の日々思うことや活動、プログラミングの習得方法を発信するページです。
仕事のご依頼、メッセージ等、サービス概要をご覧の上で、お気軽にご連絡ください。

getabakosensei@gmail.com