Exemple #1
0
    // Start is called before the first frame update
    void Start()
    {
        GameObject ourCameraPlane = GameObject.CreatePrimitive(PrimitiveType.Plane);

        ourCameraPlane.transform.position = new Vector3(0, Camera.main.transform.position.y, 0);
        ourCameraPlane.transform.up       = (Camera.main.transform.position - ourCameraPlane.transform.position).normalized;
        camera         = FindObjectOfType <CameraControl>();
        selectedObject = camera;
    }
Exemple #2
0
    // Update is called once per frame
    void Update()
    {
        if (Input.touchCount > 0)
        {
            touch = Input.GetTouch(0);
            RaycastHit info;

            Ray ourRay = Camera.main.ScreenPointToRay(Input.touches[0].position);

            Debug.DrawRay(ourRay.origin, 30 * ourRay.direction);

            if (Physics.Raycast(ourRay, out info))
            {
                if (info.collider != null)
                {
                    object_hit = info.transform.GetComponent <Icontrollable>();
                    // selectedObject = object_hit;

                    if (Input.touchCount == 1)
                    {
                        switch (Input.touches[0].phase)
                        {
                        case TouchPhase.Began:

                            timeOfTap = 0;
                            Debug.Log("Touching at: " + touch.position);
                            break;

                        case TouchPhase.Ended:

                            if (object_hit != null && IsATap())
                            {
                                object_hit.youve_been_touched();
                                Debug.Log("This a tap");
                                selectedObject = object_hit;
                                starting_distance_to_selected_object = Vector3.Distance(Camera.main.transform.position, info.transform.position);
                                selected = true;
                            }

                            else
                            {
                                selectedObject.deselect_object();
                                selectedObject = camera;
                            }

                            break;

                        // Drag Object Code
                        case TouchPhase.Moved:

                            Ray new_position_ray = Camera.main.ScreenPointToRay(Input.touches[0].position);

                            if (selectedObject is CapsuleControl)
                            {
                                selectedObject.MoveTo(new_position_ray.GetPoint(starting_distance_to_selected_object));
                                Debug.Log("Capsule Drag 2");
                            }

                            else
                            {
                                selectedObject.MoveTo(new_position_ray.GetPoint(starting_distance_to_selected_object));
                                Debug.Log("Normal Drag");
                            }


                            break;
                        }
                    }

                    if (Input.touchCount == 2)
                    {
                        Touch touch0 = Input.GetTouch(0);
                        Touch touch1 = Input.GetTouch(1);

                        if (touch0.phase == TouchPhase.Began || touch1.phase == TouchPhase.Began)
                        {
                            startDistance = Vector3.Distance(Input.GetTouch(0).position, Input.GetTouch(1).position);

                            startAngle = Mathf.Atan2(touch1.position.y - touch0.position.y, touch1.position.x - touch0.position.y);


                            if (selectedObject != null)
                            {
                                initialScale = info.transform.localScale;

                                startRotation = selectedObject.gameObject.transform.rotation;
                            }

                            else
                            {
                                startRotation = Camera.main.transform.rotation;
                            }
                        }

                        else if (touch0.phase == TouchPhase.Moved || touch1.phase == TouchPhase.Moved)
                        {
                            newestDistance      = Vector3.Distance(touch0.position, touch1.position);
                            newPos              = touch1.position - touch0.position;
                            newAngle            = Mathf.Atan2(newPos.y, newPos.x);
                            difference          = newAngle - startAngle;
                            differenceInDegrees = Mathf.Rad2Deg * difference;

                            if (selectedObject.GetType() == typeof(CameraControl) && differenceInDegrees > 20f)
                            {
                                Debug.Log("Rotating Camera");
                                scaleSize = newestDistance / startDistance;
                                selectedObject.rotateTo(differenceInDegrees, startRotation);
                            }

                            else if (selectedObject.GetType() == typeof(CameraControl) && differenceInDegrees < 20f)
                            {
                                Debug.Log("Scaling Camera");
                                scaleSize = newestDistance / startDistance;
                                selectedObject.scaleObject(initialScale, scaleSize);
                            }

                            else
                            {
                                if (differenceInDegrees > 20f)
                                {
                                    Debug.Log("Rotating");
                                    selectedObject.gameObject.transform.rotation = startRotation * Quaternion.AngleAxis(differenceInDegrees, Camera.main.transform.forward);
                                }

                                else
                                {
                                    scaleSize = newestDistance / startDistance;
                                    selectedObject.scaleObject(initialScale, scaleSize);
                                    Debug.Log("Scaling");
                                }
                            }
                        }
                    }
                }
            }
        }
    }