当前位置: 首页 > wzjs >正文

珠海网站制作首页申请自媒体账号

珠海网站制作首页,申请自媒体账号,手机网站开发模板,wordpress汉化主题模板在数字孪生项目中,精确的相机控制至关重要。相机不仅需要灵活地跟随目标,还要能够平滑地旋转和缩放,以便观察和分析物体的各个细节。今天,我将通过 TouchControlCamera 和 CameraRotate 两个脚本,展示如何实现一个适用…

在数字孪生项目中,精确的相机控制至关重要。相机不仅需要灵活地跟随目标,还要能够平滑地旋转和缩放,以便观察和分析物体的各个细节。今天,我将通过 TouchControlCameraCameraRotate 两个脚本,展示如何实现一个适用于数字孪生的相机控制系统。

1. TouchControlCamera 脚本(触摸一体机 安卓环境)

在数字孪生项目中,可能会涉及到移动端的交互式观察,用户通过触摸屏幕来操控相机,从而查看虚拟物体的各个视角。TouchControlCamera 脚本正是为此设计,它允许用户通过触摸操作来实现相机的旋转和缩放,特别适合移动设备上的数字孪生展示。

主要功能:
  • 触摸输入控制:通过手指在屏幕上的滑动或捏合手势,用户可以旋转相机或调整相机与目标物体的距离。
  • 直观的视角控制:无论是查看物体的细节,还是放大、缩小某个区域,触摸控制都能提供灵活的操作体验。
  • 平滑过渡:采用平滑算法来确保相机的旋转和缩放不会造成突兀感,用户体验更加自然。
代码实现:
using UnityEngine;public class TouchControlCamera : MonoBehaviour
{public Transform target;  // 主相机要围绕其旋转的物体public float distance = 3.0f;  // 主相机与目标物体之间的距离[HideInInspector]public float eulerAngles_x;[HideInInspector]public float eulerAngles_y;public float distanceMax = 10;  // 主相机与目标物体之间的最大距离public float distanceMin = 1;   // 主相机与目标物体之间的最小距离public float xSpeed = 5.0f;     // 主相机水平方向旋转速度public float ySpeed = 5.0f;     // 主相机纵向旋转速度public int yMaxLimit = 80;      // 最大y(单位是角度)public int yMinLimit = -80;     // 最小y(单位是角度)public float dragAreaWidth = 200f;  // 屏幕中间允许拖拽的宽度private Vector2 oldPosition1 = new Vector2(0, 0);private Vector2 oldPosition2 = new Vector2(0, 0);private float XX, YY;private bool isDragging = false;  // 是否开始拖拽// 初始相机位置和旋转private Vector3 initialPosition;private Quaternion initialRotation;private Quaternion currentRotation;private Quaternion desiredRotation;void Start(){initialPosition = this.transform.position;initialRotation = this.transform.rotation;Vector3 eulerAngles = this.transform.eulerAngles;  // 当前物体的欧拉角this.eulerAngles_x = eulerAngles.y;this.eulerAngles_y = eulerAngles.x;currentRotation = this.transform.rotation;desiredRotation = this.transform.rotation;}void Update(){OneAndTwo();}/// <summary>/// 手指触屏判断/// </summary>public void OneAndTwo(){Vector3 eulerAngles = this.transform.eulerAngles;  // 当前物体的欧拉角this.eulerAngles_x = eulerAngles.y;this.eulerAngles_y = eulerAngles.x;// 一根手指触碰,旋转if (Input.touchCount == 1){Touch touch = Input.GetTouch(0);if (touch.phase == TouchPhase.Began){// 记录触摸的初始位置XX = touch.position.x;YY = touch.position.y;// 只有在触摸点在屏幕中间区域时才开始拖拽if (Mathf.Abs(touch.position.x - Screen.width / 2) <= dragAreaWidth){isDragging = true;}else{isDragging = false;}}if (isDragging && touch.phase == TouchPhase.Moved)  // 只在拖拽时更新旋转{this.eulerAngles_x += (touch.position.x - XX) * Time.deltaTime * this.xSpeed;this.eulerAngles_y -= (touch.position.y - YY) * Time.deltaTime * this.ySpeed;this.eulerAngles_y = ClampAngle(this.eulerAngles_y, (float)this.yMinLimit, (float)this.yMaxLimit);XX = touch.position.x;YY = touch.position.y;// 使用平滑旋转效果desiredRotation = Quaternion.Euler(this.eulerAngles_y, this.eulerAngles_x, 0);currentRotation = this.transform.rotation;// 平滑过渡this.transform.rotation = Quaternion.Lerp(currentRotation, desiredRotation, 0.3f);}}// 确保相机保持在与目标物体之间的适当距离Vector3 vector = (this.transform.rotation * new Vector3(0, 0, -this.distance)) + this.target.position;// 更新相机的位置this.transform.position = vector;}// 将角度限制到给定范围内public float ClampAngle(float angle, float min, float max){while (angle < -360){angle += 360;}while (angle > 360){angle -= 360;}return Mathf.Clamp(angle, min, max);}// 新增方法:重置相机位置和旋转public void ResetCamera(){this.transform.position = initialPosition;this.transform.rotation = initialRotation;this.eulerAngles_x = initialRotation.eulerAngles.y;this.eulerAngles_y = initialRotation.eulerAngles.x;}
}

2. CameraRotate 脚本 (纯PC环境 鼠标输入)

CameraRotate 脚本适用于桌面端或VR设备,可以实现相机围绕一个目标物体的旋转。对于数字孪生中的静态或动态物体观察,这种控制方式尤为重要。它能够让用户精准地控制相机角度,确保可以从不同的视角查看虚拟物体。

主要功能:
  • 目标物体观察:相机始终围绕指定的目标物体旋转,适合需要360度查看物体细节的场景。
  • 精细的角度控制:用户可以通过鼠标控制相机在水平和垂直方向上的旋转角度,提供高精度的观察视角。
  • 角度限制:为了避免相机的旋转过度(如倒立),垂直角度旋转被限制在一定范围内。
    代码实现:
    using UnityEngine;/// <summary>
    /// 相机围绕物体观察的简化版本
    /// 可以旋转自主控制观察角度
    /// </summary>
    public class CameraRotate : MonoBehaviour
    {[Header("相机观察的目标物体")]public Transform targetObject;public Vector3 targetOffset;public float averageDistance = 5.0f;public float maxDistance = 20;public float minDistance = .6f;public float xSpeed = 200.0f;public float ySpeed = 200.0f;[Header("相机y轴视野范围")]public int yMinLimit = -80;public int yMaxLimit = 80;private float xDeg = 0.0f;private float yDeg = 0.0f;private float currentDistance;private Quaternion currentRotation;private Quaternion desiredRotation;private Quaternion rotation;private Vector3 position;void Start() { Init(); }void OnEnable() { Init(); }public void Init(){// 如果目标物体为空,则在相机正前方创建一个观察目标if (!targetObject){GameObject go = new GameObject("Cam Target");go.transform.position = transform.position + (transform.forward * averageDistance);targetObject = go.transform;}currentDistance = averageDistance;position = transform.position;rotation = transform.rotation;currentRotation = transform.rotation;desiredRotation = transform.rotation;xDeg = Vector3.Angle(Vector3.right, transform.right);yDeg = Vector3.Angle(Vector3.up, transform.up);// 相机位置 = 目标物体位置 - 目标与相机在三维下的位置差值position = targetObject.position - (rotation * Vector3.forward * currentDistance + targetOffset);}void LateUpdate(){// 按住鼠标左键时旋转相机if (Input.GetMouseButton(0)){xDeg += Input.GetAxis("Mouse X") * xSpeed * 0.02f;yDeg -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f;yDeg = ClampAngle(yDeg, yMinLimit, yMaxLimit);  // 限制y轴旋转角度desiredRotation = Quaternion.Euler(yDeg, xDeg, 0);currentRotation = transform.rotation;// 平滑旋转rotation = Quaternion.Lerp(currentRotation, desiredRotation, 0.02f);transform.rotation = rotation;}// 更新相机位置position = targetObject.position - (rotation * Vector3.forward * currentDistance + targetOffset);transform.position = position;}/// <summary>/// 限制角度angle的大小在一个范围内/// </summary>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);}
    }
    

    数字孪生项目中的应用

    通过这两个脚本的结合,你可以实现更高效的视角控制,提升数字孪生的沉浸感和交互性。

    例如,在虚拟工厂环境中,用户可以通过触摸操作放大、缩小并旋转相机,查看机器设备的各个细节。而在虚拟建筑物的模型中,用户可以通过 CameraRotate 旋转相机,从多个角度观察建筑物的外观和结构,获得更加全面的视角。


    文章转载自:

    http://xGffcN6D.cLqpj.cn
    http://mFsTShD0.cLqpj.cn
    http://nIAgpZeP.cLqpj.cn
    http://6t8cdsHE.cLqpj.cn
    http://5PImCMW5.cLqpj.cn
    http://Lx2c8nHX.cLqpj.cn
    http://NaZHAUrR.cLqpj.cn
    http://wpaHPLPS.cLqpj.cn
    http://pp7wHCdY.cLqpj.cn
    http://xpPqP6Wu.cLqpj.cn
    http://udN3tMyV.cLqpj.cn
    http://lqRFnrJE.cLqpj.cn
    http://GVwr2bbC.cLqpj.cn
    http://Rjc1e55O.cLqpj.cn
    http://WxBw28EK.cLqpj.cn
    http://arbntDZV.cLqpj.cn
    http://5TDNj733.cLqpj.cn
    http://hOckTWpd.cLqpj.cn
    http://bXpDJcYZ.cLqpj.cn
    http://34EU81aF.cLqpj.cn
    http://oaBggb6J.cLqpj.cn
    http://RRYKaxpc.cLqpj.cn
    http://PmfZUPK5.cLqpj.cn
    http://phqv6mz6.cLqpj.cn
    http://NCBywQhn.cLqpj.cn
    http://T3Z5Q3pe.cLqpj.cn
    http://timbUlNT.cLqpj.cn
    http://8uUWVj35.cLqpj.cn
    http://9ewDbpoa.cLqpj.cn
    http://gI63SDny.cLqpj.cn
    http://www.dtcms.com/wzjs/666809.html

    相关文章:

  • 小白网站搭建教程wordpress 自定义头像
  • 怎么将自己房子投入网站做民宿django网站开发视频教程
  • 如何免费建设一个网站百度商桥怎么嵌入网站
  • 湖北网站设计制作公司有哪些网站开发难吗
  • 陕西交通建设集团蓝商分公司网站如何做淘宝客的网站
  • 网站建设公司的服务网页搜索框记录怎么删除
  • 网站建设方案书应急处置方案网站建设中应注意的问题
  • 广州网站开发债券交微商城app下载
  • 网站在哪做网站建设标语文案
  • 专题网站模板高端的网站建设公司
  • 贵阳市网站优化网站手机版怎么做
  • 做职业装的网站菏泽市建设银行网站
  • 如何用照片做模板下载网站网站设计 布局
  • 自己做的网址危险网站seo教程最新
  • 婚恋网站建设技巧大连高新园区在哪
  • 专门做网站的公司有哪些做微商网站
  • 菏泽兼职网站建设做网站编程在程序
  • 图片展示类网站自己怎样做网站平台
  • 深圳的互联网公司排名绍兴seo
  • 校园资源共享网站建设工程资料外包公司
  • 安徽工程建设信息网站廊坊网站建设多少钱
  • 城市旅游网站开发福建省建设工程执业注册管理中心网站
  • 安装iis8 添加网站个人网站做cpa
  • 株洲网站的建设中色十二冶金建设集团有限公司网站
  • 做视频的网站有哪些陶瓷刀具网站策划书
  • 舞阳网站建设wordpress用什么开发工具
  • 怎么建立网站站点厦门网站建设公司电话
  • 池州市建设管理处网站邢台网络问政
  • 海淀区网站建设公司简历制作官网
  • 哈尔滨公司网站建设有没有做古装衣服的网站