private void ShowLaser(RaycastHit hit) { laser.SetActive(true); laserTransform.position = Vector3.Lerp(trackedObj.transform.position, hit.point, .5f); laserTransform.LookAt(hit.point); laserTransform.localScale = new Vector3(laserTransform.localScale.x, laserTransform.localScale.y, hit.distance); reticle.SetActive(true); teleportReticleTransform.position = hit.point; var hitMask = LayerMaskUtility.BitPositionToMask(hit.transform.gameObject.layer); if ((TeleportMask.value & hitMask) != 0) { laser.GetComponent <Renderer>().material.color = Color.blue; } else if ((StandOnMask.value & hitMask) != 0) { laser.GetComponent <Renderer>().material.color = Color.green; } else { laser.GetComponent <Renderer>().material.color = Color.red; } }
private void Teleport(RaycastHit hit) { var difference = CameraRigTransform.position - HeadTransform.position; difference.y = CameraRigTransform.position.y; var hitMask = LayerMaskUtility.BitPositionToMask(hit.transform.gameObject.layer); if ((TeleportMask.value & hitMask) != 0) { difference.y -= hit.point.y; CameraRigTransform.position = hit.point + difference; } else if ((StandOnMask.value & hitMask) != 0) { CameraRigTransform.GetComponent <MovementChangeBehaviour>().MovementState = State.Tower; CameraRigTransform.position = hit.point; ChangeTowerRole(hit); } }
private void ShowLaser(RaycastHit hit) { laser.SetActive(true); laserTransform.position = Vector3.Lerp(trackedObj.transform.position, hit.point, .5f); laserTransform.LookAt(hit.point); laserTransform.localScale = new Vector3(laserTransform.localScale.x, laserTransform.localScale.y, hit.distance); selectionTower.transform.position = hit.point; selectionTower.transform.position += towerGroundOffset; var hitMask = LayerMaskUtility.BitPositionToMask(hit.transform.gameObject.layer); if (PlaceMask.value == hitMask) { laser.GetComponent <Renderer>().material.color = Color.yellow; } else { laser.GetComponent <Renderer>().material.color = Color.red; showSelectionTower = false; } }
private void Teleport(RaycastHit hit) { var difference = CameraRigTransform.position - HeadTransform.position; //difference.y = CameraRigTransform.position.y; difference.y = 0; var hitMask = LayerMaskUtility.BitPositionToMask(hit.transform.gameObject.layer); Debug.Log(string.Format("StandOnMask: {0}, HitMask: {1}", StandOnMask.value, hitMask)); if ((StandOnMask.value & hitMask) != 0) { var currentRole = CameraRigTransform.GetComponent <RoleChangeBehaviour>().TowerRole; if (TagUtility.CompareRoleWithTowerTag(currentRole, hit.transform.tag)) { CameraRigTransform.position = hit.point; CameraRigTransform.position += difference; } } }
private void Update() { laser.SetActive(false); if (selectionTower != null) { selectionTower.SetActive(showSelectionTower); } if (Controller.GetHairTriggerDown()) { if (selectionTower == null) { selectionTower = Instantiate(SelectionTowerPrefab); } placeMode = true; } if (placeMode) { RaycastHit hit; if (Physics.Raycast(trackedObj.transform.position, transform.forward, out hit, float.PositiveInfinity)) { ShowLaser(hit); HighlightPlaceAreas(true); lastHit = hit; } if (Controller.GetPressDown(SteamVR_Controller.ButtonMask.Touchpad)) { // oben if (Controller.GetAxis().y > Threshold) { currentTowerPrefab = BrickBoyTowerPrefab; showSelectionTower = true; ChangeChildColor(Color.red); } // unten else if (Controller.GetAxis().y < -Threshold) { currentTowerPrefab = null; showSelectionTower = false; } // rechts else if (Controller.GetAxis().x > Threshold) { currentTowerPrefab = MageTowerPrefab; showSelectionTower = true; ChangeChildColor(Color.magenta); } // links else if (Controller.GetAxis().x < -Threshold) { currentTowerPrefab = ArcherTowerPrefab; showSelectionTower = true; ChangeChildColor(Color.green); } } } if (Controller.GetHairTriggerUp()) { if (lastHit.HasValue) { var hitMask = LayerMaskUtility.BitPositionToMask(lastHit.Value.transform.gameObject.layer); if (placeMode && showSelectionTower && PlaceMask.value == hitMask) { InstantiateTower(); } } showSelectionTower = false; placeMode = false; HighlightPlaceAreas(false); } }