コード例 #1
0
    // 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();
        }
        }
コード例 #2
0
    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;
            }
        }
    }