我如何使用SteamVR开枪?

问题描述 投票:0回答:1

我正在尝试制作某种射击游戏,并准备了一个脚本。这是一个创建枪支的脚本,我已经可以拾起并移动枪支了,因为我在对象上附加了可抛出的脚本。我也可以射击它(我有一个发射点和一个预制弹头)。但是,目前,唯一的触发方法是按下键盘上的一个按钮。我有一个下拉菜单,我可以选择要射击的按钮。问题是我正在尝试将其制作为VR游戏,因此我需要某种方式使用我的oculus触摸控制器开火。我想知道是否有一种方法可以让控制器上的按钮像键盘上的按下按钮一样工作,或者有人可以告诉我如何修改脚本以便可以使用steamVR Actions系统。

我正在使用带有oculus链接的oculus任务,已连接到steamVR和Unity 2019.3.1 personal。

我的枪支脚本在这里:

using UnityEngine;
using System.Collections;

public class GenericGun : MonoBehaviour {
    public KeyCode fireKey = KeyCode.Mouse0;

    public GameObject projectilePrefab;
    public Transform launchPoint;
    public bool autoFire = false;
    [Tooltip("Projectile always fires along local Z+ direction of Launch Point")]
    public float launchVelocity;

    public float projectilesPerSecond = 1f;
    public float projectileLifetime = 3f;
    private float _lastFireTime = 0f;

    [Header("If checked, ignore all ammo settings below")]
    public bool infiniteAmmo = true;
    public int startingAmmo = 10;
    public int maxAmmo = 10;
    public int currentAmmo;
    public float ammoRechargeTime = 1f;
    private float _lastAmmoRechargeTime = 0f;


    void Start() {
        currentAmmo = startingAmmo;
    }

    void Update() {
        if (autoFire || Input.GetKey (fireKey))
        {
            Launch();
        }

        if (ammoRechargeTime > 0f && Time.time > _lastAmmoRechargeTime + ammoRechargeTime) {
            this.AddAmmo(1);
        }
    }

    public void Launch() {
        if (currentAmmo > 0f  && Time.time - _lastFireTime >= 1f / projectilesPerSecond)
        {
            _lastFireTime = Time.time;

            // ignore removing ammo if it's infinite
            if(!infiniteAmmo)
                currentAmmo -= 1;

            GameObject newGO;
            if (launchPoint != null)
            {
                newGO = GameObject.Instantiate (projectilePrefab, launchPoint.position, launchPoint.rotation) as GameObject;
            }
            else
            {
                newGO = GameObject.Instantiate (projectilePrefab, this.transform.position, this.transform.rotation) as GameObject;
            }

            Rigidbody newRB = newGO.GetComponent<Rigidbody> ();

            if (newRB != null)
            {
                newRB.AddRelativeForce (Vector3.forward * launchVelocity, ForceMode.VelocityChange);
            }
            if (projectileLifetime > 0f) {
                GameObject.Destroy(newGO, projectileLifetime);
            }
        }
    }

    public void AddAmmo(int amount) {
        currentAmmo = Mathf.Min(maxAmmo, currentAmmo + 1);
    }
}

感谢您提供的任何帮助。

unity3d virtual-reality steamvr
1个回答
0
投票

要使用Oculus Quest控制器生成输入,您需要使用OVRInput

为此,您还需要在场景中包含OVRManager的实例,并在您处理输入的脚本上调用OVRInput.Update()/FixedUpdate()

有关docs的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.