0 支持
30 閲覧

OculuTouchで中指トリガーで持って、人差し指トリガーで撃てる銃を作りたいです。
自分なりにコードを組んでみましたが、持つことまではできてもそれ以外まったく反応しません。銃にアタッチしたのは下のソースコードです。

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

public class GunController : OVRGrabbable
{
    public GameObject bullet; //弾のオブジェクト

    public GameObject bulletPos; //銃の発射口座表(空オブジェクト)

    [SerializeField] private AudioSource sound; //音ソース

    [SerializeField] private AudioClip gunshot; //発射音

    [SerializeField] private AudioClip grabbsound; //持つ時の音

    public float shotSpeed; //弾の速度

    private float interval = 2f; //弾の出る間隔時間

    private float time = 0f; //上のintervalを計測するための時間



    OVRInput.Controller currentController; //今握ってる方のコントローラーを検出するための変数.

    private bool currentIsGrabb= false; //今掴まれているかどうかを認識する変数。



    // Start is called before the first frame update
    void Start()
    {
        //interval = 2f;
    }


    //public void GrabBegin(OVRInput.Controller controller)
    //{
    //    currentController = controller;
    //}


    // Update is called once per frame
    void Update()
    {
        time += Time.deltaTime;

        //どっちで持ってるか?
        GetHand();

        //持たれてて、持ってる手の人差し指が押されたら
        if (isGrabbed && OVRInput.GetDown(OVRInput.Button.PrimaryIndexTrigger, currentController))
        {
            
            if (time > interval)
            {
                BulletFire();

                //interval_Reset
                time = 0f;

               
            }
        }
    }


    private void BulletFire() {

        sound.PlayOneShot(gunshot); //発射音

        //instance生成
        GameObject createBullet = Instantiate(bullet) as GameObject;
        createBullet.transform.position = bulletPos.transform.position;

        Vector3 force;
        force = bulletPos.transform.forward * shotSpeed;

        //発射
        createBullet.GetComponent<Rigidbody>().AddForce(force);

        //弾は3秒後に破壊される
        Destroy(createBullet, 3.0f);
    }


    private void GetHand()
    {
        //かなり力技。掴まれているときに長押しされているトリガーから検知
        if (isGrabbed == true)
        {
            if (currentIsGrabb == false)
            {
                sound.PlayOneShot(grabbsound); //持った時の音を出す。
            }


            currentIsGrabb = true;


            if (OVRInput.Get(OVRInput.RawButton.RHandTrigger))
            {
                currentController = OVRInput.Controller.RTouch;
            }
            else if (OVRInput.Get(OVRInput.RawButton.LHandTrigger))
            {
                currentController = OVRInput.Controller.LTouch;
            }
        }

        if(isGrabbed == false)
        {
            currentIsGrabb = false;
        }
    }


}

エラーは出ていません。発射音や持った時の音すらなりません。助けてください。

初心者 (120 ポイント) | 30 閲覧

ログインまたはユーザー登録してから回答してください。

回答 1

0 支持

お疲れ様です。
下記の部分の読み込みはされていますでしょうか?
発射音が鳴らないとのことだったので、そもそも関数が読み込まれているのか教えていただけると助かります。
よろしくお願いいたします。

if (time > interval)

        {

     <--ここに--->

            Debug.Log('hoge');
            BulletFire();

            //interval_Reset
            time = 0f;

           
        }
初心者 (140 ポイント)
0
回答ありがとうございます。あれから削除したり追加したりして試したところ、isGrabbedが全く反応していないことがわかりました。(isGrabbedが掴まれていても何も返していない)。おそらくこれが原因だと判明しましたが、なぜisGrabbedが反応していないのかがわかりません・・・

関連する質問

+1 支持
0 回答
初心者 (150 ポイント) 2/9 質問 | 69 閲覧
0 支持
0 回答
bassan 初心者 (120 ポイント) 2 週間 質問 | 20 閲覧
0 支持
0 回答
2021-02-08 質問・回答をMarkdownで入力できるようにしました。
2020-09-03 新たなスパム対策を導入しました。

157 質問

153 回答

159 コメント

188 ユーザー