Unity5でVR開発 シューティングゲームが作りたくて2 レーザービーム発射


0. プロローグ

今回はレーザービーム光線を出します!
写真はGoogle Cardboard SDKのものです。

注視点のポインターとGameObjectが重なった時ごにょごにょする方法はこちら!

□ハコスコ編 (Google Cardboard SDK for Unity)
http://qiita.com/39_isao/items/6a9ffa1c6df3ebb197c2

□Gear VR編
http://qiita.com/39_isao/items/438bd4aa38fc46c09914

1.まずはレーザービームを作る

こちらの記事を参考に、Line Rendererでレーザーを作ります。
レーザー光線を作る【Unity】
http://aki-tk.hateblo.jp/entry/2016/01/02/193747
私はBeamというGameObject名にしました。
アクセスしやすいよう、「Beam」というタグを設定しておきます。

2.レーザービームの設定

1.BeamのLine Rendererコンポーネントを非アクティブにしておきます。
(敵にヒットした時にアクティブにします。)

2.Beam.csというビーム発射と停止の
制御スクリプトを書いて、アタッチします。

Beam.cs
using UnityEngine;
using System.Collections;

public class Beam : MonoBehaviour {

    // Use this for initialization
    void Start () {


    }

    // Update is called once per frame
    void Update () {

    }

    /* ビーム発射 */
    public void FiringBeam(GameObject[] objs){
        var lineRenderer = GetComponent<LineRenderer>();
        lineRenderer.enabled = true;
        lineRenderer.SetPosition(0, objs[0].transform.position);
        lineRenderer.SetPosition(1, objs[1].transform.position);
    }

    /* ビーム終了 */
    public void Exit(){
        var lineRenderer = GetComponent<LineRenderer>();
        lineRenderer.enabled = false;

    }
}

3. 銃口の設定

ビームが発射される銃口にしたいGameObjectに「Muzzle」というタグを設定します。
今回私は潜水艦オブジェクトの先端にしました。

4. 撃たれるオブジェクトの設定

ビームで撃たれるGameObject(以後、敵と表記)に下記Scriptをアタッチします。

Enemy.cs

using UnityEngine;
using System.Collections;

public class Enemy : MonoBehaviour {

    private GameObject Beam;
    private GameObject Muzzle;

    void Start () {
        // BeamとMuzzleオブジェクトの取得
        Beam = GameObject.FindWithTag("Beam");
        Muzzle = GameObject.FindWithTag("Muzzle");
    }

    // Update is called once per frame
    void Update () {

    }

    // ビームの始点と終点を引数で持たせ、BeamオブジェクトにSendMessageする関数
    public void SendBeam(){
        GameObject[] objs = new GameObject[2];
        objs[0] = this.gameObject;
        objs[1] = Muzzle;
        Beam.SendMessage("FiringBeam",objs);
    }

    // ビームが消える処理を呼ぶ関数
    public void ExitBeam(){
        Beam.SendMessage("Exit");
    }
}

5.ビームで撃たれるGameObjectにイベントトリガー設定

マーカーが重なった時、ビームが表示され、外れると消えるようにします。

Pointer Enter.... 注視点マーカーと敵が重なった時のイベント
Enemy.SendBeam()を設定
Pointer Exit... 注視点マーカーが敵から外れた時のイベント
Enemy.ExitBeam()を設定

この辺はこちらの記事で
http://qiita.com/39_isao/items/6a9ffa1c6df3ebb197c2

Gear VRの場合はイベントトリガーは使わず、コードで書きました。

6.完成!