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 #1 基本操作編

Unityで必ず理解しておいてほしい基本操作を漫画でまとめてみました♪ とりあえず、今からUnity始める人はこの漫画で基本を覚えてからやってみてください

no image

Unityでプラットフォームを変更する

File → BuildSettings をおす 変更したいプラットフォームを選択 → SwitchPlatform をおします ※iPhoneで出力したい場合は、iPhone、Androidで出力し …

no image

Unityのゲーム画面を動画にする(mac用)

QuickTimePlayer を起動します MaximizeOnPlay をおして、▶ をおしてテストプレイを始めます QuickTimePlayer のアイコンをおしてファイルをおし …

Unityで複数の効果音を鳴らす

SE 効果音素材入れる Assets → Import New Assetをおします 入れたい素材を選択し、Importをおします スクリプトの作成 以下スクリプトを作成して効果音を鳴らしたいオブジェ …

【初心者向け】Unityで3Dシューティングを作るチュートリアル

今回作るゲームは画像のような3Dシューティングゲームです ス○ーフォッ○スみたいですねw まずはこちらのUnityパッケージをダウンロードして下さい パッケージを入れる方法はこちら プレイヤーの移動 …

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

  • 30761総閲覧数:
  • 106今日の閲覧数:
  • 19553総訪問者数:
  • 67今日の訪問者数:

住所
Akita,Japan

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

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

getabakosensei@gmail.com