// Update is called once per frame void Update() { Ray my_ray = my_camera.ScreenPointToRay(Input.mousePosition); Debug.DrawRay(my_ray.origin, 20 * my_ray.direction); RaycastHit info_on_hit; if (Physics.Raycast(my_ray, out info_on_hit)) { Controlable my_object = info_on_hit.transform.GetComponent<Controlable>(); if (currently_selected_object) { if (my_object != currently_selected_object) { currently_selected_object.deselect(); my_object.isSelected(); currently_selected_object = my_object; } } else { my_object.isSelected(); currently_selected_object = my_object; } my_object.isSelected = true; my_object.move_up(); } }
void Update() { if (my_obj && ((Input.acceleration.x > 2 || Input.acceleration.x < -2) || (Input.acceleration.y > 2 || Input.acceleration.y < -2) || (Input.acceleration.z > 2 || Input.acceleration.z < -2))) { my_obj.transform.localScale += new Vector3(1, 1, 1); } if (my_obj && my_gyro != Input.gyro) { my_obj.transform.rotation = my_gyro.attitude; print(my_obj.transform.rotation); } my_gyro = Input.gyro; if (Input.touchCount > 0) { if (tapped) { countdown -= Time.deltaTime; } if (Input.touchCount == 2) { Touch touch1 = Input.GetTouch(0); Touch touch2 = Input.GetTouch(1); Vector2 touchOnePrevPos = touch1.position - touch1.deltaPosition; Vector2 touchTwoPrevPos = touch2.position - touch2.deltaPosition; float prevTouchDeltaMag = (touchOnePrevPos - touchTwoPrevPos).magnitude; float touchDeltaMag = (touch1.position - touch2.position).magnitude; float deltaMagnitudeDiff = prevTouchDeltaMag - touchDeltaMag; float pinchAmount = deltaMagnitudeDiff * 0.2f * Time.deltaTime; if (deltaMagnitudeDiff > 2 || deltaMagnitudeDiff < -2) { if (my_obj) { my_obj.transform.localScale -= new Vector3(pinchAmount, pinchAmount, pinchAmount); } if (!my_obj) { Vector3 focalPoint = Vector3.zero; Vector3 direction = my_camera.transform.position - focalPoint; float newDistance = direction.magnitude / deltaMagnitudeDiff; my_camera.transform.position = newDistance * direction.normalized; } } else { Vector2 diff = touch2.position - touch1.position; var angle = Mathf.Rad2Deg * (Mathf.Atan2(diff.y, diff.x)); previousTouch2 = touch2; if (my_obj) { var initialobj_orie = my_obj.transform.rotation; my_obj.transform.rotation = initialobj_orie * Quaternion.AngleAxis(angle - initialobj_angle, my_obj.transform.forward); initialobj_angle = angle; } else { var initialcam_orie = my_camera.transform.rotation; my_camera.transform.rotation = initialcam_orie * Quaternion.AngleAxis(angle - initialcam_angle, my_camera.transform.forward); initialcam_angle = angle; } } } if (Input.GetTouch(0).phase == TouchPhase.Began) { tapped = true; tapIsUp = false; } if (Input.touchCount == 1) { Touch current_touch = Input.GetTouch(0); Ray my_ray = Camera.main.ScreenPointToRay(current_touch.position); RaycastHit info; if (countdown > 0) { if (Physics.Raycast(my_ray, out info)) { Controlable object_hit = info.transform.GetComponent <Controlable>(); if (object_hit) { if (my_obj) { my_obj.deselect(); my_obj = null; } object_hit.select(object_hit); my_obj = object_hit; } else { if (my_obj) { my_obj.deselect(); my_obj = null; } } } else { if (my_obj) { my_obj.deselect(); my_obj = null; } } } else { if (my_obj) { Vector3 cameraPos = my_camera.transform.position; my_obj.dragObject(my_ray, cameraPos); } if (!my_obj) { my_camera.transform.position += cameraSpeed * my_camera.transform.right * current_touch.deltaPosition.x + cameraSpeed * my_camera.transform.up * current_touch.deltaPosition.y; } } } if (Input.touchCount == 3 && my_obj) { Instantiate(my_obj, new Vector3(my_obj.transform.position.x * 2.0F, 0, 0), Quaternion.identity); my_obj = null; } if (Input.GetTouch(0).phase == TouchPhase.Ended) { tapped = false; countdown = 0.3f; } } }