(14)敵を作る③(サーチ機能で発見したら発射)

「2種類目の敵」を作ります。

*オブジェクトで自分の好きなように2種類目の敵を作りましょう。

スクリーンショット 2016-07-08 12.09.22

*ここでは「EnemyB」という名前をつけています。

*この敵にも「EnemyShotShell」オブジェクトを「子供として付けて」おいてください。名前は「EnemyShotShell2」に変更しましょう。


今回は「プレーヤーが攻撃範囲内に入ったら感知する機能(サーチ機能)」を作ります。

そして、「サーチ機能でプレーヤーを発見したら砲弾を発射」するようにします。

発想としては、これまで何度も登場してきた「OnTrigger系」のメソッドを使えば実現できます。

(重要ポイント)

「当たり判定」を行うためには、「それぞれのオブジェクト」に「Collider」(コライダー)のコンポーネント(機能)が付いている必要があります。


1)Box Colliderを付ける。

スクリーンショット 2016-07-08 12.14.49

「Add Component」を使って、「EnemyShotShell2」オブジェクトに「Box Collider」を加えてください。

・Box Colliderの「Center」「Size」を調整して、前方に長細い長方形の枠を作りましょう。

「この枠にプレーヤーが触れたら砲弾を発射する仕組み」となります。

「Is Trigger」にもチェックを入れておきましょう。

スクリーンショット 2016-07-08 12.25.44

次はスクリプトを作成します。


2)EnemyShotShell2スクリプトの作成

「C# Script」を1つ作成。

・名前は「EnemyShotShell2」に変更してください。

・ダブルクリックして、下記のコードを記載しましょう。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
using UnityEngine;
using System.Collections;
 
public class EnemyShotShell2 : MonoBehaviour {
 
    // 変数を定義する(データを入れるための箱を作る)
    public GameObject enemyShellPrefab;
    public float shotSpeed;
    public AudioClip shotSound;
    private int timeCount = 0;
 
 
    void Update () {
 
        timeCount += 1;
    }
 
    // 「OnTriggerStay」になっているのがポイント!
    void OnTriggerStay(Collider other){
        if(other.gameObject.CompareTag("Player")){
 
            if(timeCount % 20 == 0){
                EnemyShot();
 
                AudioSource.PlayClipAtPoint(shotSound, transform.position);
            }
        }
    }
 
    void EnemyShot(){
 
        GameObject enemyShell = (GameObject)Instantiate(enemyShellPrefab, transform.position, Quaternion.identity);
 
        Rigidbody enemyShellRigidbody = enemyShell.GetComponent<Rigidbody>();
 
        enemyShellRigidbody.AddForce(transform.forward * shotSpeed);
 
        Destroy(enemyShell, 1.0f);
    }
}

(重要ポイント)

「OnTriggerEnter()」メソッドは、Collider同士が「触れた瞬間に」実行するものです。

「OnTriggerStay()」メソッドは、Collider同士が「触れている間ずっと」実行するものです。

「%」「割った余り」という意味です。

「==」「左右が等しい」という意味です。

(考えてみよう!)

*では、今回の「timeCount % 20 == 0」はどういう意味でしょうか?


・コードが書けたらチェック。

「EnemyShotShell2」オブジェクトにドラッグ&ドロップしましょう。

スクリーンショット 2016-07-08 12.35.50

*「Enemy Shell Prefab」等を設定しておきましょう。

スクリーンショット 2016-07-08 12.36.14


・ここまでできたら「再生ボタン」を押してみましょう。

プレーヤーを敵に近づけてください。

敵の攻撃範囲内に入った時「敵の攻撃」が始まったら成功です。

*(注意!)

・Tank(プレーヤー)に「Player」タグが付いているか確認しましょう。

スクリーンショット 2016-07-08 12.52.19

ここまでで2種類の敵が完成しました。

1種類目の敵=>一定時間ごとに砲弾を自動発射

2種類目の敵=>プレーヤーが攻撃範囲内に入ったら砲弾を発射

これらの敵を自分の世界の中に自由に配置しましょう。