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 を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

no image

「ゲームが作れる!」と言い切れるようになるために

さて、僕は子どもにゲーム作りを教えてそれによって子どもの表現力を伸ばすという仕事をしています。 その過程でまず習得に必要なツールとして、 ①Scratch これはプログラミングに必要な最低限の知識を習 …

Unity2018のArgumentException: Value does not fall within the expected rangeへの対処法

さて、Unityで2018にアップデートすると、 ArgumentException: Value does not fall within the expected rangeというエラーがずっと出 …

no image

C#の構造とルール

Unityのデフォルトのスクリプト

C#スクリプトはいくつかエリアに分かれているので、まずはそのエリアについて解説します C#の機能や …

no image

攻撃判定

①当たり判定を出したいキャラクターにスクリプトを取り付ける ②取り付けたスクリプトのobjに出現させたい当たり判定をドラッグ&#038 …

no image

一定距離で追従するカメラ

Main Cameraにスクリプトを貼り付ける Targetにプレイヤーをドラッグ&ドロップ キャラクターにカメラがついてい …

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

  • 42206総閲覧数:
  • 27今日の閲覧数:
  • 27924総訪問者数:
  • 23今日の訪問者数:

住所
Akita,Japan

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

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

getabakosensei@gmail.com