HTC Viveのコントローラーから火を発射する。

 

ねこますさんが、ねこまというキャラで、手から魔法を出していたので、とりあえず、私は手から炎を出させようと試みてみました。

 

 

こういう風に書いてみました。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.VR;

public class fireGenerator : MonoBehaviour {
    public SteamVR_TrackedObject trackedObject;
    public GameObject fire;

    public float speed;

    void Start () {
    }

    void Update () {
        var device = SteamVR_Controller.Input*1
        {
            var newfire = Instantiate (fire, device.transform.pos, Quaternion.identity);
            Quaternion newQuaternion = new Quaternion();
            newQuaternion.Set(device.transform.rot.x, device.transform.rot.y, device.transform.rot.z, device.transform.rot.w);
            newfire.transform.rotation = newQuaternion;
            newfire.GetComponent<Rigidbody>().AddForce(newfire.transform.forward*speed);
        }
    }
}

 

 

f:id:alakialaca:20180601034755j:plain

tracked objectにはコントローラーを、fireには生成したいものを、speedをいじって勢いを変えれるといった感じです。

初めは、

 newfire.GetComponent<Rigidbody>().AddForce("ここにコントローラーの方向ベクトルをいれる");

という方法でできないかと思っていたのですが、ちょっとその情報の取得の方法がわからなかったため、

生成する炎の向きを、Set(device.transform.rot.x, device.transform.rot.y, device.transform.rot.z, device.transform.rot.w);でコントローラーの向きに回転させた後、前方に力をかけるAddForceで飛ばしています。

 

もっと楽な方法ありそうですが。

とりあえず、この方法で飛ばせたのでメモ。

 

unity難しいのぉ

 

Unityゲーム プログラミング・バイブル

Unityゲーム プログラミング・バイブル

 

 

 

 

 

*1:int)trackedObject.index);
        if (device.GetPressDown(SteamVR_Controller.ButtonMask.Trigger