読者です 読者をやめる 読者になる 読者になる

たこやき部屋

SteamVRを使って、Unityでゲームを開発したい

VRボンバーマンを作りたい その13(敵に爆弾を置かせる)

VRTK Ver2.2.1の記事です。
Ver3になって使い方が色々と変わっています。ついでに名前も「SteamVR Unity Toolkit」から「Virtual Reality Toolkit」へ変わっています。
使い方はこちらの記事を参照してください。
takoyakiroom.hatenablog.com(以上、2017/02/04 追記)


ふう、しばらくの間ゲームにハマっていた為、作業が中断していました。

さて敵も適当に作って動くようになったので、今度は敵に爆弾を置くようにさせてみよう。
・・・の前に、今後敵の動きを作りやすくする為にも、何も考えずに作っていたスクリプトを一旦見直し。

ゲーム上で爆弾を置いたり動き回ったり出来るキャラのクラスとして「Player」を作り、そこから派生させて自分でコントロールできるキャラ「ControllPlayer」と、敵「Enemy」のクラスを作りました。

んで、敵キャラには移動ができなくなった時に爆弾を置くようにさせてみます。

すっごく簡単にそれぞれのクラスを表現するとこんな感じかなぁ。
自分も敵も共通の動作をさせたい場合はPlayerのクラスに、個別の動作をさせたい場合はそれぞれのクラスに。

Player.cs

public class Player : MonoBehaviour {
    // 開始
    public virtual void Start()
    {
        火力=3;
        爆弾置ける数=5;
    }

    // 死んだ
    public virtual void Dead()
    {
         // 特にやることはない
    }

    // 何かにぶつかった
    void OnTriggerEnter(Collider other)
    {
        switch (タグ名)
        {
            case "FireUp":
                // 火力増やす
                FireUp();
                break;
            case "BombUp":
                // 爆弾増やす
                BombUp();
                break;
        }
        // 爆風に当たった時は、爆風側のクラスの「OnTriggerEnter」で
        // player.Deadを呼び出しています
    }

    // 爆弾置く
    public void PutBomb()
    {
         爆弾を置く処理;
    }

    // 火力増やす
    public void FireUp()
    {
        火力増やす処理;
        アイテム取った時の取得効果;
    }

    // 爆弾増やす
    public void BombUp()
    {
        爆弾増やす処理;
        アイテム取った時の取得効果;
    }
}

ControllPlayer.cs

public class ControllPlayer : Player {
    // 開始
    public override void Start()
    {
        base.Start();
        自分用の初期化処理;
    }

    // 死んだ
    public override void Dead()
    {
        base.Dead();
        画面を暗くする;
        コントローラを振動;
    }
}

Enemy.cs

public class Enemy : Player {
    // 開始
    public override void Start () {
        base.Start();
        敵用の初期化処理;
    }

    // 死んだ
    public override void Dead()
    {
        base.Dead();
    }

    void Update () {
        if(止まっている)
        {
            爆弾を置く;
        }
        行き先を決めて移動;
    }
}

動かしてみると、敵は動けなくなった時に爆弾を置いて、道を切り開くようになりました。
爆風に当たった時の処理は入れていないので怖いものナシ、爆弾を置きながらどんどん進むぞー。
f:id:takoyakiroom:20161123123437j:plain

そして行き先であるプレイヤーに元に。
f:id:takoyakiroom:20161123123438j:plain

VR画面だと遠くに爆風が見えて、良い感じにゲームっぽくなってきたー!
f:id:takoyakiroom:20161123123444j:plain

今回の敵の動きはここまでで、今まで気になっていたけど無視していた「アイテムにテレポート用のポインタが当たってしまう」という現象を直します。

これこれ
f:id:takoyakiroom:20161123123439j:plain

直し方は、ポインタを透過させたいオブジェクトの「Layer」を「Ingore Raycast」にするだけです。
f:id:takoyakiroom:20161123123443j:plain

ポインタがアイテムを通り越して、地面に反応するようになりました。メデタシ
f:id:takoyakiroom:20161123123441j:plain