目标:

在UI层上 自由观察3D 模型,实现鼠标控制模型的旋转,缩放&& 触摸屏手势控制模型的旋转缩放控制;

这里仅将控制代码挂载到相机上,通过对相机的控制来观察模型。

基本上为最小单元了,1个控制脚本即可完成展示目标。

效果展示:

分别可以用鼠标和触摸屏来控制

脚本代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;/// <summary>
/// 此代码挂载到相机上,
/// </summary>
public class SmoothUi3DCamera : MonoBehaviour
{public Transform pivot;public Vector3 pivotOffset = Vector3.zero;public Transform target;public float distance = 10.0f;public float minDistance = 5f;public float maxDistance = 15f;public float zoomSpeed = 1f;public float xSpeed = 250.0f;public float ySpeed = 250.0f;[Header("触摸旋转速度因子")]public float touchSpeed = 0.05f; // 测试显示0.05f 效果更佳public bool allowYTilt = true;public float yMinLimit = -90f;public float yMaxLimit = 90f;private float x = 0.0f;private float y = 0.0f;private float targetX = 0f;private float targetY = 0f;public float targetDistance = 0f;private float xVelocity = 1f;private float yVelocity = 1f;private float zoomVelocity = 1f;private Touch oldTouch1;  //上次触摸点1(手指1)private Touch oldTouch2;  //上次触摸点2(手指2)private void Start(){var angles = transform.eulerAngles;// 因为是操作的相机,所以我们实际的操作出来是向反的方向targetY = x = angles.x;targetX = y = ClampAngle(angles.y, yMinLimit, yMaxLimit);targetDistance = distance;}private void LateUpdate(){if (!pivot) return;#region 鼠标控制// 鼠标中键控制缩放var scroll = Input.GetAxis("Mouse ScrollWheel");if (scroll > 0.0f) targetDistance -= zoomSpeed;else if (scroll < 0.0f)targetDistance += zoomSpeed;targetDistance = Mathf.Clamp(targetDistance, minDistance, maxDistance);// 鼠标左右键操作旋转if (Input.GetMouseButton(0) || (Input.GetMouseButton(1) && (Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl)))){targetX += Input.GetAxis("Mouse X") * xSpeed * 0.02f;if (allowYTilt){targetY -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f;targetY = ClampAngle(targetY, yMinLimit, yMaxLimit);}}x = Mathf.SmoothDampAngle(x, targetX, ref xVelocity, 0.3f);y = allowYTilt ? Mathf.SmoothDampAngle(y, targetY, ref yVelocity, 0.3f) : targetY;Quaternion rotation = Quaternion.Euler(y, x, 0);//Quaternion rotation = Quaternion.Euler(x, y, 0);distance = Mathf.SmoothDamp(distance, targetDistance, ref zoomVelocity, 0.5f);Vector3 position = rotation * new Vector3(0.0f, 0.0f, -distance) + pivot.position + pivotOffset;transform.rotation = rotation;transform.position = position;#endregion#region 触摸控制//没有触摸,就是触摸点为0// if (Input.touchCount <= 0)// {// return;// }//单点触摸, 水平上下旋转if (1 == Input.touchCount){Touch touch = Input.GetTouch(0);Vector2 deltaPos = touch.deltaPosition;targetX += deltaPos.x * xSpeed * 0.02f * touchSpeed;if (allowYTilt){targetY -= deltaPos.y * ySpeed * 0.02f * touchSpeed;targetY = ClampAngle(targetY, yMinLimit, yMaxLimit);}}if (2 == Input.touchCount){//多点触摸, 放大缩小Touch newTouch1 = Input.GetTouch(0);Touch newTouch2 = Input.GetTouch(1);//第2点刚开始接触屏幕, 只记录,不做处理if (newTouch2.phase == TouchPhase.Began){oldTouch2 = newTouch2;oldTouch1 = newTouch1;return;}//计算老的两点距离和新的两点间距离,变大要放大模型,变小要缩放模型float oldDistance = Vector2.Distance(oldTouch1.position, oldTouch2.position);float newDistance = Vector2.Distance(newTouch1.position, newTouch2.position);//两个距离之差,为正表示放大手势, 为负表示缩小手势float offset = newDistance - oldDistance;if (offset > 0.0f) targetDistance -= zoomSpeed;else if (offset < 0.0f)targetDistance += zoomSpeed;targetDistance = Mathf.Clamp(targetDistance, minDistance, maxDistance);//记住最新的触摸点,下次使用oldTouch1 = newTouch1;oldTouch2 = newTouch2;}#endregion}private 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);}
}

完整的演示程序包:

unity3D模型自由观察,旋转缩放-C#文档类资源-CSDN下载在UI上自由观察3D模型,鼠标控制模型的旋转,缩放&&触摸屏手势控制模型的旋转更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/u013509878/85648262文件为3d模型自由观察旋转缩放.unitypackage,直接导入项目即可查看

希望可以帮助大家。

unity 3D模型展示旋转缩放相关推荐

  1. Unity 3D模型展示框架篇之项目整理

    本项目将整合之前Unity程序基础小框架专栏在Unity 3D模型展示项目基础上进行整合,并记录了集成过程中对原脚本的调整过程.增加了Asset Bundle+ILRuntime热更新技术流程. 1. ...

  2. Unity 3D模型展示框架篇之自由观察(Cinemachine)

    本项目将整合之前Unity程序基础小框架专栏在Unity 3D模型展示项目基础上进行整合,并记录了集成过程中对原脚本的调整过程.增加了Asset Bundle+ILRuntime热更新技术流程. 在U ...

  3. Unity 3D模型展示之webGL平台展现

    在之前的项目基础上我们已经打包后在PC端进行展示了.这篇文章主要介绍在切换到webGL上时效果展示不出来需要进行调整,特此记录一下. 1.平台切换 选择WebGL平台切换,没有的可以进行安装,安装之后 ...

  4. Unity 3D模型展示框架篇之框架运用

    本项目将整合之前Unity程序基础小框架专栏在Unity 3D模型展示项目基础上进行整合,并记录了集成过程中对原脚本的调整过程.增加了Asset Bundle+ILRuntime热更新技术流程. 效果 ...

  5. Unity 3D模型展示框架篇之ILRuntime快速入门

    系列文章目录 Unity 3D模型展示框架篇之项目整理 Unity 3D模型展示框架篇之框架运用 Unity 3D模型展示框架篇之自由观察(Cinemachine) Unity 3D模型展示框架篇之资 ...

  6. Unity 3D模型展示之UI布局

    整体布局情况 导入UI资源并统一将Texture Type设置为Sprite(2D and UI) 1.标题 将Text中的文本设置为'Unity 3D物体展示实例'. 添加Shadow与Outlin ...

  7. Unity 3D模型展示之自由观察模型

    效果展示 进行调整将灯光放到Main Camera下,旋转的时候光就一直打在这面. 1.观察模型脚本 public class Smooth3DCamera : MonoBehaviour {publ ...

  8. Unity 3D模型展示之模型透明效果

    效果展示 1.透明效果实现思路 简单点就是将模型的材质替换成透明材质.需要注意:1.指定范围内的模型进行透明化.2.一个模型会有多个材质,都需要进行透明化.3.还能将模型的材质恢复最初的效果.4.选中 ...

  9. Unity 3D模型展示之生成标注

    1.效果图 2.生成标注 标注生成要求: 1.指定元件生成标注. 2.生成标注出现位置可以设置. 根据标注生成的要求,可以在元件添加脚本时将这些信息读取并进行实现.控制标注生成在元件的位置,生成标注的 ...

最新文章

  1. 2021 年高教社杯全国大学生数学建模竞赛A题分析
  2. 2020年度国家绿色数据中心名单正式发布
  3. html怎么自动设为底部,让底部永远在页面最底部显示的css方法
  4. Android Studio系列(二)使用Android Studio开发/调试整个android系统源代码(不定时更新)
  5. Java大数加法乘法减法、36进制加法
  6. CSS对IE6、IE7、IE8支持详细的易用的参考
  7. 2021牛客暑期多校训练营9
  8. 未能初始化social club错误代码0_智能电表错误代码大全 报警灯常亮原因
  9. 5e怎么绑定一键跳投_一键开启100台主机?我不是开玩笑,你真该了解一下这根小棒子...
  10. MYSQL主从同步(主库服务器为Linux,从库为Windows)
  11. Windows 2008 R2 ServerCore学习点滴(1)
  12. unity透明通道加颜色_Unity的Gamma颜色空间和Linear颜色空间的小研究
  13. 科比退役原因-数据分析
  14. 计算机软件登记委托开发合同,软件委托开发合同
  15. 如何对 Excel 中的数据使用 SQL 查询
  16. Errors occured, no packages were upgraded. ⇒ ERROR: Failed to install packages to new root.
  17. 云计算基础平台iaas(openstack)超级详细搭建(三)安装服务
  18. Graphics2D 详细应用秘籍
  19. 安卓流畅度测试方法二:FPS Meter测试安卓帧数
  20. 关于互联网用户的隐私保护

热门文章

  1. 考勤打卡定位问题解决办法------公网ip
  2. 平面创意设计师简历模板-Word简历可编辑下载
  3. A. Spring Couplets
  4. go-zero 单体应用最假实践 - chat
  5. SMSC2021 Day3Day4 部分题解
  6. 通过SMPP连接SMSC发送短信(转)
  7. PCL计算ConvexHull凸包、ConcaveHull凹包
  8. neo4j构建郑州2022-年前疫情知识图谱
  9. JavaScript第十三讲:DOM的应用操作
  10. 图形识别-基于opencv+java简单程序