Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.UI;
- public enum state {
- move = 0,
- rotation = 1,
- setpoint = 2,
- inside = 3,
- scale = 4
- }
- public class TouchScript : MonoBehaviour
- {
- public LayerMask touchInputMask;
- private Transform target = null;
- private objectScript targetScript;
- private Vector3 trim;
- private float dist;
- private state Stat;
- private Vector3 startPos;
- public float SensevityScale = 0.001f;
- private float rotationSpeed = 540f; // скорость вращения
- // ------------------------------------------
- private bool _inside;
- public Text text;
- public bool setPos;
- private void Start()
- {
- Stat = state.move;
- text.text = Stat.ToString();
- }
- public void statesSwich(string str)
- {
- setPos = false;
- if (str == "move")
- {
- Stat = state.move;
- }
- if (str == "rotate")
- {
- Stat = state.rotation;
- }
- if (str == "setpoint")
- {
- Stat = state.setpoint;
- setPos = true;
- }
- if (str == "inside")
- {
- Stat = state.inside;
- _inside = true;
- }
- if (str == "scale")
- {
- Stat = state.scale;
- }
- text.text = Stat.ToString();
- }
- public void changeSens(float sens){
- rotationSpeed = sens;
- SensevityScale = sens;
- text.text = "" + rotationSpeed;
- }
- void OnMoveStart(Vector3 _pos)
- {
- Ray ray = Camera.main.ScreenPointToRay(_pos);
- RaycastHit hit;
- Debug.DrawRay(ray.origin, ray.direction * 100, Color.yellow);
- if (Physics.Raycast(ray, out hit, touchInputMask))
- {
- target = hit.transform;
- dist = hit.distance;
- trim = hit.collider.transform.position - hit.point;
- }
- }
- void OnMoveStay(Vector3 _pos)
- {
- if (!target) return;
- Ray ray = Camera.main.ScreenPointToRay(_pos);
- Vector3 pos = ray.origin + ray.direction * dist;
- pos += trim;
- target.position = pos;
- }
- void OnMoveEnd(Vector3 _pos)
- {
- target = null;
- }
- void OnRotateStart(Vector3 _pos)
- {
- Ray ray = Camera.main.ScreenPointToRay(_pos);
- RaycastHit hit;
- Debug.DrawRay(ray.origin, ray.direction * 100, Color.yellow);
- if (Physics.Raycast(ray, out hit, touchInputMask))
- {
- target = hit.transform;
- startPos = _pos;
- }
- }
- void OnRotateStay(Vector3 _pos)
- {
- if (!target) return;
- float dX = (_pos.x - startPos.x) / Screen.width;
- float dY = (_pos.y - startPos.y) / Screen.height;
- target.Rotate(Vector3.up, -dX * rotationSpeed, Space.World);
- target.Rotate(Vector3.up, -dY * rotationSpeed, Space.World);
- startPos = _pos;
- }
- void OnRotateEnd(Vector3 _pos)
- {
- target = null;
- }
- void OnZoomStart(Vector3 _pos1, Vector3 _pos2)
- {
- targetScript = (objectScript) FindObjectOfType(typeof(objectScript));
- dist = (_pos1 - _pos2).magnitude;
- }
- void OnZoomStay(Vector3 _pos1, Vector3 _pos2)
- {
- if (!targetScript) return;
- float delta = dist - (_pos1 - _pos2).magnitude;
- targetScript.Scale(delta * SensevityScale);
- }
- void OnZoomEnd(Vector3 _pos1, Vector3 _pos2)
- {
- target = null;
- }
- void Update()
- {
- #if UNITY_EDITOR
- switch (Stat)
- {
- case state.move:
- if (Input.GetMouseButtonDown(0))
- OnMoveStart(Input.mousePosition);
- if (Input.GetMouseButton(0) && !Input.GetMouseButtonDown(0))
- OnMoveStay(Input.mousePosition);
- if (!Input.GetMouseButton(0))
- OnMoveEnd(Vector3.zero);
- break;
- //поворот
- case state.rotation:
- if (Input.GetMouseButtonDown(0))
- OnRotateStart(Input.mousePosition);
- if (Input.GetMouseButton(0) && !Input.GetMouseButtonDown(0))
- OnRotateStay(Input.mousePosition);
- if (!Input.GetMouseButton(0))
- OnRotateEnd(Vector3.zero);
- break;
- case state.scale:
- if (Input.GetAxis("Mouse ScrollWheel")!=0)
- {
- OnZoomStart(Vector3.left, Vector3.right);
- OnZoomStay(Vector3.left, Vector3.right * (1 + Input.GetAxis("Mouse ScrollWheel")) ); // типа двигаем правый тач
- }
- else
- {
- OnZoomEnd(Vector3.zero, Vector3.zero);
- }
- break;
- }
- #endif
- switch (Stat)
- {
- case state.move:
- if (Input.touchCount == 1)
- {
- Touch touch = Input.GetTouch(0);
- if (touch.phase == TouchPhase.Began)
- OnMoveStart(touch.position);
- if (touch.phase == TouchPhase.Moved)
- OnMoveStay(touch.position);
- if (touch.phase == TouchPhase.Ended || touch.phase == TouchPhase.Canceled)
- OnMoveEnd(touch.position);
- }
- break;
- case state.rotation:
- if (Input.touchCount == 1)
- {
- Touch touch = Input.GetTouch(0);
- if (touch.phase == TouchPhase.Began)
- OnRotateStart(touch.position);
- if (touch.phase == TouchPhase.Moved)
- OnRotateStay(touch.position);
- if (touch.phase == TouchPhase.Ended || touch.phase == TouchPhase.Canceled)
- OnRotateEnd(touch.position);
- }
- break;
- case state.scale:
- if (Input.touchCount == 2)
- {
- Touch touch1 = Input.GetTouch(0);
- Touch touch2 = Input.GetTouch(1);
- if (touch1.phase == TouchPhase.Began || touch2.phase == TouchPhase.Began)
- OnZoomStart(touch1.position, touch2.position);
- if ((touch1.phase == TouchPhase.Moved || touch1.phase == TouchPhase.Stationary) && // тач1 стоит или двигается
- (touch2.phase == TouchPhase.Moved || touch2.phase == TouchPhase.Stationary) && // тач2 стоит или двигается
- (touch1.phase != TouchPhase.Stationary && touch2.phase != TouchPhase.Stationary)) // тач1 не стоит && тач2 не стоит
- OnZoomStay(touch1.position, touch2.position);
- if (touch1.phase == TouchPhase.Ended || touch2.phase == TouchPhase.Ended ||
- touch1.phase == TouchPhase.Canceled || touch2.phase == TouchPhase.Canceled)
- OnZoomEnd(touch1.position, touch2.position);
- }
- break;
- }
- }
- public void Inside()
- {
- objectScript objTemp = (objectScript)FindObjectOfType(typeof(objectScript));
- if (objTemp != null)
- {
- objTemp.Inside();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement