void teleport() { Vector2 originalPos = this.transform.position; Vector2 newPos = Camera.main.ScreenToWorldPoint(Input.mousePosition); if (newPos.x > ar_manager.x_max || newPos.x < ar_manager.x_min || newPos.y > ar_manager.y_max || newPos.y < ar_manager.y_min) { return; } this.transform.position = newPos; GameObject player_surrogate = Instantiate(teleportPlayerSurrogatePrefab, originalPos, Quaternion.identity); player_surrogate.GetComponent <SpriteRenderer>().sprite = this.GetComponent <SpriteRenderer>().sprite; player_surrogate.transform.localScale = this.transform.localScale; player_surrogate.GetComponent <Animator>().SetTrigger("despawn"); this.GetComponent <Animator>().SetTrigger("spawn"); TeleportLine line = Instantiate(teleportLinePrefab).GetComponent <TeleportLine>(); line.setPoints(originalPos, newPos); this.GetComponent <Rigidbody2D>().velocity = Vector3.zero; //now not falling if (teleportEvent != null) { teleportEvent(); } }
// Update is called once per frame void Update() { ControllerDevice = SteamVR_Controller.Input((int)TrackObj.index); //(only Lefthand)--->for Teleporting if (forHand == Hand.LeftHand) { //To show the moving place if (ControllerDevice.GetTouch(SteamVR_Controller.ButtonMask.Touchpad)) { //Debug.Log("ControllerDevice.rigibody.velocity:" + gameObject.GetComponent<Rigidbody>().velocity + "\nControllerDevice.rigibody.angularVelocity:" + gameObject.GetComponent<Rigidbody>().angularVelocity); isCanTeleport = false; TeleportLineRender.gameObject.SetActive(true); RaycastHit hitInfo; if (Physics.Raycast(transform.position, transform.forward, out hitInfo, 15.0f, TeleporterLayer)) { TeleporterLocation = hitInfo.point; TeleportLineRender.numPositions = 2; TeleportLineRender.SetPosition(0, transform.position); TeleportLineRender.SetPosition(1, TeleporterLocation); isCanTeleport = true; } else { Vector3 TempDirectionPoint = transform.position + transform.forward * 15; RaycastHit groundRayhit; if (Physics.Raycast(TempDirectionPoint, -Vector3.up, out groundRayhit, 17.0f, TeleporterLayer)) { //TeleporterLocation = new Vector3(transform.position.x + transform.forward.x * 15, groundRayhit.transform.position.y, transform.position.z + transform.forward.z * 15); TeleporterLocation = groundRayhit.point; TeleportLine.DrawBezierLine(TeleportLineRender, transform.position, TempDirectionPoint, TeleporterLocation, 20); isCanTeleport = true; } else { TeleportLineRender.numPositions = 2; TeleportLineRender.SetPosition(0, transform.position); TeleportLineRender.SetPosition(1, TempDirectionPoint); //TeleporterLocation = Player.transform.position; isCanTeleport = false; } } if (isCanTeleport) { TeleporterTargetObject.transform.position = TeleporterLocation + (Vector3.up * 0.001f); TeleporterTargetObject.SetActive(true); } } //To teleport the player if (ControllerDevice.GetPressDown(SteamVR_Controller.ButtonMask.Touchpad)) { if (isCanTeleport) { Player.transform.position = TeleporterLocation; TeleportLineRender.gameObject.SetActive(false); TeleporterTargetObject.SetActive(false); } } //Romove teleport if (ControllerDevice.GetTouchUp(SteamVR_Controller.ButtonMask.Touchpad)) { TeleportLineRender.gameObject.SetActive(false); TeleporterTargetObject.SetActive(false); } } //(only RightHand) --->for menu if (forHand == Hand.RightHand) { //memu apearing if (ControllerDevice.GetPressDown(SteamVR_Controller.ButtonMask.Trigger)) { MenuAppear(); } //Menu disappear if (ControllerDevice.GetPressUp(SteamVR_Controller.ButtonMask.Trigger)) { MenuDisappear(); } //SpawnObject if (ControllerDevice.GetPress(SteamVR_Controller.ButtonMask.Trigger)) { if (ControllerDevice.GetTouchDown(SteamVR_Controller.ButtonMask.Touchpad)) { //Record the Axis of x and y on firstTouch TouchLast_x = ControllerDevice.GetAxis(Valve.VR.EVRButtonId.k_EButton_SteamVR_Touchpad).x; TouchLast_y = ControllerDevice.GetAxis(Valve.VR.EVRButtonId.k_EButton_SteamVR_Touchpad).y; } if (ControllerDevice.GetTouch(SteamVR_Controller.ButtonMask.Touchpad)) { //Record the Axis x on its moving distance Touchcurrent_x = ControllerDevice.GetAxis(Valve.VR.EVRButtonId.k_EButton_SteamVR_Touchpad).x; distance_x = Touchcurrent_x - TouchLast_x; TouchLast_x = Touchcurrent_x; SwipeSum_x += distance_x; //Record the Axis y on its moving distance Touchcurrent_y = ControllerDevice.GetAxis(Valve.VR.EVRButtonId.k_EButton_SteamVR_Touchpad).y; distance_y = Touchcurrent_y - TouchLast_y; TouchLast_y = Touchcurrent_y; SwipeSum_y += distance_y; //if Axis x's swipe distance >0.5, then change selected Object if (!hasSwipeRight_x) { if (SwipeSum_x > 0.5f) { SwipeSum_x = 0; SwipeRight(); hasSwipeRight_x = true; hasSwipeLeft_x = false; } } if (!hasSwipeLeft_x) { if (SwipeSum_x < -0.5f) { SwipeSum_x = 0; SwipeLeft(); hasSwipeRight_x = false; hasSwipeLeft_x = true; } } //if Axis y's swipe distance >0.5, then change selected Munu if (!hasSwipeRight_y) { if (SwipeSum_y > 0.5f) { SwipeSum_y = 0; SwipeUP(); hasSwipeRight_y = true; hasSwipeLeft_y = false; } } if (!hasSwipeLeft_y) { if (SwipeSum_y < -0.5f) { SwipeSum_y = 0; SwipeDown(); hasSwipeRight_y = false; hasSwipeLeft_y = true; } } } //if leave the touchpad ,reSet the touch number if (ControllerDevice.GetTouchUp(SteamVR_Controller.ButtonMask.Touchpad)) { Touchcurrent_x = 0; TouchLast_x = 0; distance_x = 0; SwipeSum_x = 0; hasSwipeLeft_x = false; hasSwipeRight_x = false; } if (ControllerDevice.GetPressDown(SteamVR_Controller.ButtonMask.Touchpad)) { SpawnObject(); } } } }