分享

Unity3d 简单实现物体旋转缩放移动

 文清阳 2017-03-17

由于项目运行在安卓上,运用到了插件,比较麻烦。你们可以在触发条件上进行修改,不用插件也可以。

1.下载FingerGestures 插件 下载地址 点击打开链接


2.导入插件,创建场景 将预设Finger Gestures Initializer 拖拽到 Hierarchy 视图中


3。添加脚本,拖拽到摄像机上。创建一个方块拖拽到脚本target 属性上。

[csharp] view plain copy
在CODE上查看代码片派生到我的代码片
  1. using UnityEngine;  
  2. using System.Collections;  
  3.   
  4. public class ObjectControl : MonoBehaviour  
  5. {  
  6.     public Transform target;  
  7.     public float yawSensitivity = 80.0f;  
  8.     public float pitchSensitivity = 160.0f;  
  9.     public bool clampPitchAngle = true;  
  10.     public float pinchZoomSensitivity = 0.5f;//缩放速度  
  11.     public float smoothZoomSpeed = 10.0f;  
  12.     public float smoothOrbitSpeed = 20.0f;  
  13.     public float distance = 0;  
  14.   
  15.     float yaw = 0;  
  16.     float pitch = 0;  
  17.     float idealYaw = 0;  
  18.     float idealPitch = 0;  
  19.     float fChangeScale = 0;  
  20.     float fChangeideal = 0;  
  21.     public Transform[] movementP;  
  22.   
  23.     /// <summary>  
  24.     /// 控制模式枚举  
  25.     /// </summary>  
  26.     public enum ControlModel  
  27.     {  
  28.         Zoom, Rotate, Translate  
  29.     }  
  30.   
  31.     public ControlModel controlModel = ControlModel.Rotate;  
  32.   
  33.     //Vector3 position=new Vector3();  
  34.     public bool bArrive = false;//鼠标是否到达零件箱边界区域  
  35.     //平移方式是否根据鼠标拖动距离还是直接置为鼠标位置  
  36.     public bool ifDragMove = false;  
  37.     //平移方式为:根据鼠标拖动距离 时,评议的速度  
  38.     public float moveSpeed = 1.0f;  
  39.     //是够需要画出按钮(缩放、旋转、平移)  
  40.     public bool ifDrawBtn = true;  
  41.     //缩放方式改为:改变相机范围  
  42.     public bool zoomCamera = false;  
  43.     //zoomCamera = true ,相机的最小范围值  
  44.     public float minZoom = 0f;  
  45.     //zoomCamera = true ,相机的最大范围值  
  46.     public float maxZoom = 179f;  
  47.     //平移对象  
  48.     public Transform moveTarget;  
  49.     //平移对象的初始位置  
  50.     Vector3 moveTargetPos;  
  51.     //模型的直接父对象  
  52.     public Transform parentModel;  
  53.     Vector3 parentModelPos;  
  54.   
  55.     void Start()  
  56.     {  
  57.         zoomCamera = true;  
  58.     }  
  59.   
  60.     void OnEnable()  
  61.     {  
  62.   
  63.         FingerGestures.OnDragMove += FingerGestures_OnDragMove;  
  64.         FingerGestures.OnPinchMove += FingerGestures_OnPinchMove;  
  65.         FingerGestures.OnFingerDragEnd += OnFingerDragEnd;  
  66.   
  67.     }  
  68.   
  69.     void OnDisable()  
  70.     {  
  71.         FingerGestures.OnDragMove -= FingerGestures_OnDragMove;  
  72.         FingerGestures.OnPinchMove -= FingerGestures_OnPinchMove;  
  73.         FingerGestures.OnFingerDragEnd -= OnFingerDragEnd;  
  74.     }  
  75.   
  76.     public void setRotation()  
  77.     {  
  78.         Vector3 angles = target.eulerAngles;  
  79.         yaw = idealYaw = angles.y;  
  80.         pitch = idealPitch = angles.x;  
  81.     }  
  82.   
  83.     void FingerGestures_OnDragMove(Vector2 fingerPos, Vector2 delta)  
  84.     {  
  85.         onDrag = true;  
  86.         try  
  87.         {  
  88.             Screen.showCursor = false;  
  89.         }  
  90.         catch  
  91.         {  
  92.             Screen.showCursor = false;  
  93.         }  
  94.         if (controlModel == ControlModel.Rotate && !bArrive)  
  95.         {  
  96.             idealYaw -= delta.x * yawSensitivity * 0.02f;  
  97.             idealPitch += delta.y * pitchSensitivity * 0.02f;  
  98.             len = delta;  
  99.             if (target) target.transform.Rotate(new Vector3(delta.y, -delta.x, 0), Space.World);  
  100.         }  
  101.         if (controlModel == ControlModel.Translate && !bArrive)  
  102.         {  
  103.             if (ifDragMove)  
  104.             {  
  105.                 if (moveTarget == null)  
  106.                 {  
  107.                     target.position = new Vector3(target.position.x + delta.x * moveSpeed, target.position.y + delta.y * moveSpeed, target.localPosition.z);// GetWorldPos( fingerPos );  
  108.                 }  
  109.                 else  
  110.                 {  
  111.                     moveTarget.position = new Vector3(moveTarget.position.x + delta.x * moveSpeed, moveTarget.position.y + delta.y * moveSpeed, moveTarget.localPosition.z);  
  112.                 }  
  113.             }  
  114.             else  
  115.             {  
  116.                 if (moveTarget == null)  
  117.                 {  
  118.                     target.position = GetWorldPos(fingerPos);  
  119.                 }  
  120.                 else  
  121.                 {  
  122.                     moveTarget.position = GetWorldPos(fingerPos);  
  123.                 }  
  124.             }  
  125.         }  
  126.   
  127.     }  
  128.   
  129.     void FingerGestures_OnPinchMove(Vector2 fingerPos1, Vector2 fingerPos2, float delta)  
  130.     {  
  131.   
  132.         if (controlModel == ControlModel.Zoom && !bArrive)  
  133.         {  
  134.             if (zoomCamera)  
  135.             {  
  136.                 float fZoom = camera.fieldOfView - delta * pinchZoomSensitivity * 800 * Time.deltaTime;  
  137.                 fZoom = Mathf.Min(fZoom, maxZoom);  
  138.                 fZoom = Mathf.Max(fZoom, minZoom);  
  139.                 camera.fieldOfView = Mathf.Lerp(camera.fieldOfView, fZoom, Time.deltaTime * smoothZoomSpeed);  
  140.                 // camera.transform.position = target.position - fZoom * camera.transform.forward;  
  141.             }  
  142.             else  
  143.             {  
  144.   
  145.                 fChangeScale = target.localScale.x + delta * pinchZoomSensitivity;  
  146.   
  147.                 Vector3 vc = new Vector3(fChangeScale, fChangeScale, fChangeScale);  
  148.             }  
  149.         }  
  150.     }  
  151.     //滑动结束  
  152.     void OnFingerDragEnd(int fingerIndex, Vector2 fingerPos)  
  153.     {  
  154.         Screen.showCursor = true;  
  155.   
  156.         onDrag = false;  
  157.     }  
  158.   
  159.   
  160.     //把Unity屏幕坐标换算成3D坐标  
  161.     Vector3 GetWorldPos(Vector2 screenPos)  
  162.     {  
  163.         // Camera mainCamera = Camera.main;  
  164.         Camera mainCamera = GameObject.FindGameObjectWithTag("MainCamera").GetComponent<Camera>();  
  165.         if (!mainCamera.enabled)  
  166.         {  
  167.             mainCamera = mainCamera.transform.parent.FindChild("CameraOne").GetComponent<Camera>();  
  168.         }  
  169.         return mainCamera.ScreenToWorldPoint(new Vector3(screenPos.x, screenPos.y, Mathf.Abs(target.position.z - mainCamera.transform.position.z)));  
  170.     }  
  171.   
  172.     void Apply()  
  173.     {  
  174.         if (controlModel == ControlModel.Rotate && !bArrive)  
  175.         {  
  176.             yaw = Mathf.Lerp(yaw, idealYaw, Time.deltaTime * smoothOrbitSpeed);  
  177.             pitch = Mathf.Lerp(pitch, idealPitch, Time.deltaTime * smoothOrbitSpeed);  
  178.         }  
  179.     }  
  180.     bool onDrag;  
  181.     Vector2 len;  
  182.   
  183.     void LateUpdate()  
  184.     {  
  185.         if (Input.GetMouseButtonUp(1) || Input.GetMouseButtonUp(0))  
  186.         {  
  187.             Screen.showCursor = true;  
  188.         }  
  189.         Apply();  
  190.     }  
  191.   
  192.     static float ClampAngle(float angle, float min, float max)  
  193.     {  
  194.         if (angle < -360)  
  195.             angle += 360;  
  196.   
  197.         if (angle > 360)  
  198.             angle -= 360;  
  199.   
  200.         return Mathf.Clamp(angle, min, max);  
  201.     }  
  202.   
  203.     void Update()  
  204.     {  
  205.         ///自由切换  
  206.   
  207.         if (Input.GetMouseButtonDown(0))  
  208.         {  
  209.   
  210.             controlModel = ControlModel.Translate;  
  211.         }  
  212.   
  213.         if (Input.GetMouseButtonDown(1))  
  214.         {  
  215.   
  216.             controlModel = ControlModel.Rotate;  
  217.         }  
  218.   
  219.         if (Input.GetAxis("Mouse ScrollWheel") != 0)  
  220.         {  
  221.             controlModel = ControlModel.Zoom;  
  222.         }  
  223.   
  224.     }  
  225.   
  226.     /// <summary>  
  227.     /// 复位  
  228.     /// </summary>  
  229.     public void ResetValue()  
  230.     {  
  231.         if (moveTarget != null)  
  232.         {  
  233.             moveTarget.localPosition = moveTargetPos;  
  234.         }  
  235.         if (parentModel != null)  
  236.         {  
  237.             parentModel.localPosition = parentModelPos;  
  238.         }  
  239.         yaw = 0;  
  240.         pitch = 0;  
  241.         idealYaw = 0;  
  242.         idealPitch = 0;  
  243.     }  
  244.   
  245. }  


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多