【问题标题】:SetActive(True) not working after build but okay in the unity editorSetActive(True) 在构建后不起作用,但在统一编辑器中可以
【发布时间】:2021-06-25 14:50:34
【问题描述】:

我无法解决这个问题,我想在使用 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;
    }
}

【问题讨论】:

    标签: c# unity3d virtual-reality oculusquest


    【解决方案1】:

    我遇到了完全相同的问题。适合我的解决方案是更改构建设置。

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

    这也应该适合你!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-14
      相关资源
      最近更新 更多