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; } }