由于项目运行在安卓上,运用到了插件,比较麻烦。你们可以在触发条件上进行修改,不用插件也可以。
1.下载FingerGestures 插件 下载地址 点击打开链接
2.导入插件,创建场景 将预设Finger Gestures Initializer 拖拽到 Hierarchy 视图中
3。添加脚本,拖拽到摄像机上。创建一个方块拖拽到脚本target 属性上。
- using UnityEngine;
- using System.Collections;
-
- public class ObjectControl : MonoBehaviour
- {
- public Transform target;
- public float yawSensitivity = 80.0f;
- public float pitchSensitivity = 160.0f;
- public bool clampPitchAngle = true;
- public float pinchZoomSensitivity = 0.5f;//缩放速度
- public float smoothZoomSpeed = 10.0f;
- public float smoothOrbitSpeed = 20.0f;
- public float distance = 0;
-
- float yaw = 0;
- float pitch = 0;
- float idealYaw = 0;
- float idealPitch = 0;
- float fChangeScale = 0;
- float fChangeideal = 0;
- public Transform[] movementP;
-
- /// <summary>
- /// 控制模式枚举
- /// </summary>
- public enum ControlModel
- {
- Zoom, Rotate, Translate
- }
-
- public ControlModel controlModel = ControlModel.Rotate;
-
- //Vector3 position=new Vector3();
- public bool bArrive = false;//鼠标是否到达零件箱边界区域
- //平移方式是否根据鼠标拖动距离还是直接置为鼠标位置
- public bool ifDragMove = false;
- //平移方式为:根据鼠标拖动距离 时,评议的速度
- public float moveSpeed = 1.0f;
- //是够需要画出按钮(缩放、旋转、平移)
- public bool ifDrawBtn = true;
- //缩放方式改为:改变相机范围
- public bool zoomCamera = false;
- //zoomCamera = true ,相机的最小范围值
- public float minZoom = 0f;
- //zoomCamera = true ,相机的最大范围值
- public float maxZoom = 179f;
- //平移对象
- public Transform moveTarget;
- //平移对象的初始位置
- Vector3 moveTargetPos;
- //模型的直接父对象
- public Transform parentModel;
- Vector3 parentModelPos;
-
- void Start()
- {
- zoomCamera = true;
- }
-
- void OnEnable()
- {
-
- FingerGestures.OnDragMove += FingerGestures_OnDragMove;
- FingerGestures.OnPinchMove += FingerGestures_OnPinchMove;
- FingerGestures.OnFingerDragEnd += OnFingerDragEnd;
-
- }
-
- void OnDisable()
- {
- FingerGestures.OnDragMove -= FingerGestures_OnDragMove;
- FingerGestures.OnPinchMove -= FingerGestures_OnPinchMove;
- FingerGestures.OnFingerDragEnd -= OnFingerDragEnd;
- }
-
- public void setRotation()
- {
- Vector3 angles = target.eulerAngles;
- yaw = idealYaw = angles.y;
- pitch = idealPitch = angles.x;
- }
-
- void FingerGestures_OnDragMove(Vector2 fingerPos, Vector2 delta)
- {
- onDrag = true;
- try
- {
- Screen.showCursor = false;
- }
- catch
- {
- Screen.showCursor = false;
- }
- if (controlModel == ControlModel.Rotate && !bArrive)
- {
- idealYaw -= delta.x * yawSensitivity * 0.02f;
- idealPitch += delta.y * pitchSensitivity * 0.02f;
- len = delta;
- if (target) target.transform.Rotate(new Vector3(delta.y, -delta.x, 0), Space.World);
- }
- if (controlModel == ControlModel.Translate && !bArrive)
- {
- if (ifDragMove)
- {
- if (moveTarget == null)
- {
- target.position = new Vector3(target.position.x + delta.x * moveSpeed, target.position.y + delta.y * moveSpeed, target.localPosition.z);// GetWorldPos( fingerPos );
- }
- else
- {
- moveTarget.position = new Vector3(moveTarget.position.x + delta.x * moveSpeed, moveTarget.position.y + delta.y * moveSpeed, moveTarget.localPosition.z);
- }
- }
- else
- {
- if (moveTarget == null)
- {
- target.position = GetWorldPos(fingerPos);
- }
- else
- {
- moveTarget.position = GetWorldPos(fingerPos);
- }
- }
- }
-
- }
-
- void FingerGestures_OnPinchMove(Vector2 fingerPos1, Vector2 fingerPos2, float delta)
- {
-
- if (controlModel == ControlModel.Zoom && !bArrive)
- {
- if (zoomCamera)
- {
- float fZoom = camera.fieldOfView - delta * pinchZoomSensitivity * 800 * Time.deltaTime;
- fZoom = Mathf.Min(fZoom, maxZoom);
- fZoom = Mathf.Max(fZoom, minZoom);
- camera.fieldOfView = Mathf.Lerp(camera.fieldOfView, fZoom, Time.deltaTime * smoothZoomSpeed);
- // camera.transform.position = target.position - fZoom * camera.transform.forward;
- }
- else
- {
-
- fChangeScale = target.localScale.x + delta * pinchZoomSensitivity;
-
- Vector3 vc = new Vector3(fChangeScale, fChangeScale, fChangeScale);
- }
- }
- }
- //滑动结束
- void OnFingerDragEnd(int fingerIndex, Vector2 fingerPos)
- {
- Screen.showCursor = true;
-
- onDrag = false;
- }
-
-
- //把Unity屏幕坐标换算成3D坐标
- Vector3 GetWorldPos(Vector2 screenPos)
- {
- // Camera mainCamera = Camera.main;
- Camera mainCamera = GameObject.FindGameObjectWithTag("MainCamera").GetComponent<Camera>();
- if (!mainCamera.enabled)
- {
- mainCamera = mainCamera.transform.parent.FindChild("CameraOne").GetComponent<Camera>();
- }
- return mainCamera.ScreenToWorldPoint(new Vector3(screenPos.x, screenPos.y, Mathf.Abs(target.position.z - mainCamera.transform.position.z)));
- }
-
- void Apply()
- {
- if (controlModel == ControlModel.Rotate && !bArrive)
- {
- yaw = Mathf.Lerp(yaw, idealYaw, Time.deltaTime * smoothOrbitSpeed);
- pitch = Mathf.Lerp(pitch, idealPitch, Time.deltaTime * smoothOrbitSpeed);
- }
- }
- bool onDrag;
- Vector2 len;
-
- void LateUpdate()
- {
- if (Input.GetMouseButtonUp(1) || Input.GetMouseButtonUp(0))
- {
- Screen.showCursor = true;
- }
- Apply();
- }
-
- static float ClampAngle(float angle, float min, float max)
- {
- if (angle < -360)
- angle += 360;
-
- if (angle > 360)
- angle -= 360;
-
- return Mathf.Clamp(angle, min, max);
- }
-
- void Update()
- {
- ///自由切换
-
- if (Input.GetMouseButtonDown(0))
- {
-
- controlModel = ControlModel.Translate;
- }
-
- if (Input.GetMouseButtonDown(1))
- {
-
- controlModel = ControlModel.Rotate;
- }
-
- if (Input.GetAxis("Mouse ScrollWheel") != 0)
- {
- controlModel = ControlModel.Zoom;
- }
-
- }
-
- /// <summary>
- /// 复位
- /// </summary>
- public void ResetValue()
- {
- if (moveTarget != null)
- {
- moveTarget.localPosition = moveTargetPos;
- }
- if (parentModel != null)
- {
- parentModel.localPosition = parentModelPos;
- }
- yaw = 0;
- pitch = 0;
- idealYaw = 0;
- idealPitch = 0;
- }
-
- }
|