Beispiel #1
0
    void Update()
    {
        switch (state)
        {
        case State.Ready:
            RaycastHit hit;
            Vector3    direction = transform.forward;
            if (Vector3.Dot(direction, Vector3.down) > 0.8f)
            {
                direction = Vector3.down;
            }
            if (Physics.Raycast(transform.position, direction, out hit, reach, blockingLayerMask))
            {
                reticle.gameObject.SetActive(true);
                reticle.transform.position = hit.point;
                reticle.transform.up       = hit.normal;

                if (buildableLayerMask == (buildableLayerMask | (1 << hit.collider.gameObject.layer)))
                {
                    reticle.ChangeStatus(true);

                    if (Input.GetAxis(activateInputAxis) > 0.5)
                    {
                        state = State.Creating;
                        CreatePillar(hit);

                        initialHandPosition = transform.position - XRRig.instance.transform.position;
                        //initialHeadPosition = Camera.main.transform.position;
                    }
                }
                else
                {
                    reticle.ChangeStatus(false);
                }
            }
            else
            {
                reticle.gameObject.SetActive(false);
            }
            break;

        case State.Creating:
            reticle.gameObject.SetActive(false);
            currentPillar.SetHeight(GetGestureAmplitude());
            if (Input.GetAxis(activateInputAxis) < 0.5)
            {
                state = State.Ready;
            }
            break;
        }
    }