本文实例为大家分享了Unity3D实现物体旋转缩放移动的具体代码,供大家参考,具体内容如下
由于项目运行在安卓上,运用到了插件,比较麻烦。你们可以在触发条件上进行修改,不用插件也可以。
1。下载FingerGestures插件下载地址,点击打开链接
2。导入插件,创建场景将预设手指动作初始化拖拽到层次视图中
3。添加脚本,拖拽到摄像机上。创建一个方块拖拽到脚本目标属性上。
使用UnityEngine; 使用System.Collections; 公开课ObjectControl: MonoBehaviour { 公共变换目标; 公共浮动yawSensitivity f=80.0; 公共浮动pitchSensitivity f=160.0; 公共bool clampPitchAngle=true; 公共浮动pinchZoomSensitivity=0.5 f;//缩放速度 公共浮动smoothZoomSpeed f=10.0; 公共浮动smoothOrbitSpeed f=20.0; 公共浮动距离=0; 浮动偏航=0; 浮动距=0; 浮动idealYaw=0; 浮动idealPitch=0; 浮动fChangeScale=0; 浮动fChangeideal=0; 公共变换[]movementP;///& lt; summary>///控制模式枚举///& lt;/summary> 公共enum ControlModel { 缩放、旋转、翻译 } 公共ControlModel ControlModel=ControlModel.Rotate;//Vector3位置=new Vector3 (); 公共bool bArrive=false;//鼠标是否到达零件箱边界区域//平移方式是否根据鼠标拖动距离还是直接置为鼠标位置 公共bool ifDragMove=false;//平移方式为:根据鼠标拖动距离时,评议的速度 公开上市的移动速度=1.0度;//是够需要画出按钮(缩放,旋转,平移) 公共bool ifDrawBtn=true;//缩放方式改为:改变相机范围 公共bool zoomCamera=false;//zoomCamera=true,相机的最小范围值 公共浮动minZoom=0 f;//zoomCamera=true,相机的最大范围值 公共浮动maxZoom=179 f;//平移对象 公共变换moveTarget;//平移对象的初始位置 Vector3 moveTargetPos;//模型的直接父对象 公共变换parentModel; Vector3 parentModelPos; 无效的Start () { zoomCamera=true; } 空白OnEnable () { FingerGestures。OnDragMove +=FingerGestures_OnDragMove; FingerGestures。OnPinchMove +=FingerGestures_OnPinchMove; FingerGestures。OnFingerDragEnd +=OnFingerDragEnd; } 空白OnDisable () { FingerGestures。OnDragMove -=FingerGestures_OnDragMove; FingerGestures。OnPinchMove -=FingerGestures_OnPinchMove; FingerGestures。OnFingerDragEnd -=OnFingerDragEnd; } 公共空间setRotation () { Vector3角=target.eulerAngles; 偏航=idealYaw=angles.y; 距=idealPitch=angles.x; } 空白FingerGestures_OnDragMove (Vector2 fingerPos Vector2δ) { onDrag=true; 试一试 { 屏幕上。showCursor=false; } 抓 { 屏幕上。showCursor=false; } 如果(controlModel==controlModel。旋转,,! bArrive) { idealYaw -=δ。x * yawSensitivity * 0.02 f; idealPitch +=δ。y * pitchSensitivity * 0.02 f; len=三角洲; 如果target.transform(目标)。旋转(新Vector3(δ。y -它。x, 0), Space.World); } 如果(controlModel==controlModel。翻译,,! bArrive) { 如果(ifDragMove) { 如果(moveTarget==null) { 目标。=new Vector3 (target.position位置。x +δ。x *移动速度,target.position。y +δ。y *移动速度,target.localPosition.z);//GetWorldPos (fingerPos); } 其他的 { moveTarget。=new Vector3 (moveTarget.position位置。x +δ。x *移动速度,moveTarget.position。y +δ。y *移动速度,moveTarget.localPosition.z); } } 其他的 { 如果(moveTarget==null) { 目标。位置=GetWorldPos (fingerPos); } 其他的 { moveTarget。位置=GetWorldPos (fingerPos); } } } } 空白FingerGestures_OnPinchMove (Vector2 fingerPos1, Vector2 fingerPos2,浮动δ) { 如果(controlModel==controlModel。放大,,! bArrive) { 如果(zoomCamera) { 浮动fZoom=相机。fieldOfView -δ* pinchZoomSensitivity * 800 * Time.deltaTime; fZoom=Mathf。Min (fZoom maxZoom); fZoom=Mathf。马克斯(fZoom minZoom); 相机。fieldOfView=Mathf.Lerp(相机。fieldOfView、fZoom Time.deltaTime * smoothZoomSpeed);//camera.transform。位置=目标。位置- fZoom * camera.transform.forward; } 其他的 { fChangeScale=target.localScale。x +δ* pinchZoomSensitivity; Vector3 vc=new Vector3 (fChangeScale, fChangeScale fChangeScale); } } }//滑动结束 空白OnFingerDragEnd (int fingerIndex Vector2 fingerPos) { 屏幕上。showCursor=true; onDrag=false; }//把团结屏幕坐标换算成3 d坐标 Vector3 GetWorldPos (Vector2 screenPos) {//相机mainCamera=Camera.main; 相机mainCamera=GameObject.FindGameObjectWithTag (“mainCamera”) .GetComponentUnity3D实现物体旋转缩放移动效果