0

当我使用 VR 控制器移动时,我想隐藏和取消隐藏游戏对象(UI),我无法解决这个问题。它在编辑器中运行良好,但在为 oculus quest(android) 构建后,它保持不活动状态。任何人都可以帮助我吗?我列出了需要隐藏的 UI 列表,并希望在相机不移动时将其设置为活动状态,并在相机移动时将其设置为隐藏

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR;
using UnityEngine.XR.Interaction.Toolkit;
using UnityEngine.UI;

public class ContinuousMovement : MonoBehaviour
{
    //This script is used to make the VR Camera moves continuous using the analog
    public float speed = 1;
    public XRNode inputSource;
    public float gravity = -9.81f;
    public LayerMask groundLayer;
    public float additionalHeight = 0.2f;
    public List<GameObject> UiToBeHidden;

    private float fallingSpeed;
    private XRRig rig;
    private Vector2 inputAxis;
    private CharacterController character;

    // Start is called before the first frame update
    void Start()
    {
        character = GetComponent<CharacterController>();
        rig = GetComponent<XRRig>();

        foreach (GameObject ui in UiToBeHidden)
        {
            ui.SetActive(true);
        }
    }

    // Update is called once per frame
    void Update()
    {
        CapsuleFollowHeadset();
        InputDevice device = InputDevices.GetDeviceAtXRNode(inputSource);
        device.TryGetFeatureValue(CommonUsages.primary2DAxis, out inputAxis);

        Quaternion headYaw = Quaternion.Euler(0, rig.cameraGameObject.transform.eulerAngles.y, 0);
        Vector3 direction = headYaw * new Vector3(inputAxis.x, 0, inputAxis.y);

        character.Move(direction * Time.fixedDeltaTime * speed);

        if (inputAxis.x == 0 && inputAxis.y == 0)
        {

            Debug.Log("static");
            foreach (GameObject ui in UiToBeHidden)
            {
                ui.SetActive(true);
            }
        }
        else
        {
            Debug.Log("moving");
            foreach (GameObject ui in UiToBeHidden)
            {
                ui.SetActive(false);
            }
        }
    }

 

    private void FixedUpdate()
    {
        //gravity
        bool isGrounded = CheckIfGrounded();
        if (isGrounded)
            fallingSpeed = 0;
        else
            fallingSpeed += gravity * Time.fixedDeltaTime;

        character.Move(Vector3.up * fallingSpeed * Time.fixedDeltaTime);
    }

    void CapsuleFollowHeadset()
    {
        character.height = rig.cameraInRigSpaceHeight + additionalHeight;
        Vector3 capsuleCenter = transform.InverseTransformPoint(rig.cameraGameObject.transform.position);
        character.center = new Vector3(capsuleCenter.x, character.height /2 + character.skinWidth, capsuleCenter.z);
    }

    bool CheckIfGrounded()
    {
        //tells us if on ground
        Vector3 rayStart = transform.TransformPoint(character.center);
        float rayLength = character.center.y + 0.01f;
        bool hasHit = Physics.SphereCast(rayStart, character.radius, Vector3.down, out RaycastHit hitInfo, rayLength, groundLayer);
        return hasHit;
    }
}
4

1 回答 1

0

我有完全相同的问题。对我有用的解决方案是更改构建设置。

Build Setting --> Player Settings --> Player --> Other Setting --> Api Compatibility level ( Change from .Net Standard 2.0 --> .Net 4.x)

这也应该对你有用!

于 2021-04-07T05:42:44.953 回答