Exemplo n.º 1
0
            private void SetUpCanvas()
            {
                _canvas            = new GameObject().AddComponent <Canvas>();
                _canvas.renderMode = RenderMode.WorldSpace;
                var followTarget = _canvas.gameObject.AddComponent <FollowTarget>();

                _canvas.transform.localScale    = Vector3.one * 0.0015f;
                followTarget.target             = Locator.GetPlayerCamera().transform;
                followTarget.localPosition      = Vector3.forward * 4;
                followTarget.rotationSmoothTime = 0.5f;
                followTarget.positionSmoothTime = 0.5f;
                _canvas.gameObject.AddComponent <ConditionalRenderer>().getShouldRender = ShouldRender;

                SetUpBackground();
                SetUpText();

                MaterialHelper.MakeGraphicChildrenDrawOnTop(_canvas.gameObject);
                LayerHelper.ChangeLayerRecursive(_canvas.gameObject, LayerMask.NameToLayer("UI"));
            }
Exemplo n.º 2
0
            internal void Awake()
            {
                _thrusterHUD = GameObject.Find("HUD_Thrusters").transform;

                // Add a stronger line pointing forward in the thruster HUD
                var forwardIndicator = GameObject.CreatePrimitive(PrimitiveType.Cube).transform;

                forwardIndicator.parent           = _thrusterHUD.Find("ThrusterArrows/Positive_Z");
                forwardIndicator.localPosition    = Vector3.forward * 0.75f;
                forwardIndicator.localRotation    = Quaternion.identity;
                forwardIndicator.localScale       = new Vector3(0.05f, 0.05f, 1.5f);
                forwardIndicator.gameObject.layer = LayerMask.NameToLayer("HeadsUpDisplay");
                forwardIndicator.GetComponent <MeshRenderer>().material.shader = Shader.Find("Unlit/Color");
                forwardIndicator.GetComponent <MeshRenderer>().material.SetColor("_Color", Color.white);

                var animator = FindObjectOfType <HUDHelmetAnimator>();

                animator.SetValue("_helmetOffsetSpring", new DampedSpring3D());

                // Move helmet forward to make it a bit more visible.
                _helmet = animator.transform;
                _helmet.localPosition = Vector3.forward * -0.07f;
                _helmet.localScale    = Vector3.one * 0.5f;
                _helmet.gameObject.AddComponent <SmoothFollowParentRotation>();

                Camera.main.nearClipPlane = 0.01f;

                // Replace helmet model to prevent looking outside the edge.
                var helmetModelParent = _helmet.Find("HelmetRoot/HelmetMesh/HUD_Helmet_v2");

                helmetModelParent.gameObject.AddComponent <ConditionalRenderer>().getShouldRender = () =>
                                                                                                    NomaiVR.Config.showHelmet;

                var helmetModel = Instantiate(AssetLoader.HelmetPrefab, helmetModelParent);

                LayerHelper.ChangeLayerRecursive(helmetModel, "VisibleToPlayer");
                Destroy(helmetModelParent.Find("Helmet").gameObject);
                Destroy(helmetModelParent.Find("HelmetFrame").gameObject);
                helmetModel.AddComponent <ConditionalRenderer>().getShouldRender += () => Locator.GetPlayerSuit().IsWearingHelmet();

                // Adjust projected HUD.
                var surface = GameObject.Find("HUD_CurvedSurface").transform;

                // re-use variables because getShouldRender is called every frame via Update
                // variables are not strictly necessary, but otherwise the expression would be quite long and hard to read
                bool isWearingHelmet;
                bool hideBecauseOfConversation;

                surface.gameObject.AddComponent <ConditionalRenderer>().getShouldRender += () =>
                {
                    isWearingHelmet           = Locator.GetPlayerSuit().IsWearingHelmet();
                    hideBecauseOfConversation = PlayerState.InConversation() && NomaiVR.Config.hideHudInConversations;

                    return(isWearingHelmet && !hideBecauseOfConversation);
                };

                surface.transform.localScale    = Vector3.one * 3.28f;
                surface.transform.localPosition = new Vector3(-0.06f, -0.44f, 0.1f);
                var notifications = FindObjectOfType <SuitNotificationDisplay>().GetComponent <RectTransform>();

                notifications.anchoredPosition = new Vector2(-200, -100);

                // Default HUD shader looks funky in stereo, so we need to replace it with something more standard.
                var surfaceRenderer = surface.gameObject.GetComponent <MeshRenderer>();

                surfaceRenderer.material.SetColor("_Color", new Color(1.5f, 1.5f, 1.5f, 1));
                MaterialHelper.MakeMaterialDrawOnTop(surfaceRenderer.material);

                var playerHUD = GameObject.Find("PlayerHUD");

                // Fix lock on UI on suit mode.
                var lockOnCanvas = playerHUD.transform.Find("HelmetOffUI/HelmetOffLockOn").GetComponent <Canvas>();

                lockOnCanvas.planeDistance = 10;
            }
Exemplo n.º 3
0
 private static void PostStartConversation()
 {
     MaterialHelper.MakeGraphicChildrenDrawOnTop(_canvasTransform.gameObject);
 }