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

XR-RokidAR-UXR3.0-Draggable 脚本解析

using System.Collections.Generic;
using Rokid.UXR.Utility;
using UnityEngine;
using UnityEngine.EventSystems;namespace Rokid.UXR.Interaction
{/// <summary>/// Draggable 拖拽组件/// </summary>// [RequireComponent(typeof(RayInteractable))]public class Draggable : MonoBehaviour, IBezierCurveDrag, IRayBeginDrag, IRayDragToTarget, IRayEndDrag, IDraggable{[SerializeField, Tooltip("The min point to relative to the camera")]private Vector3 minPoint = new Vector3(-2, -0.8f, -2);[SerializeField, Tooltip("The farthest point to relative to the camera")]private Vector3 maxPoint = new Vector3(2, 1.2f, 2);[SerializeField, Tooltip("The drag obj is look at camera")]private bool lookAtCamera = false;[SerializeField, Tooltip("The drag obj is clamp in target filed")]private bool clampInTargetFiled = false;[SerializeField, Tooltip("The obj follow this drag obj")]private Transform followObj;[SerializeField, Tooltip("The drag smooth speed")]private int smoothSpeed = 10;[SerializeField, Tooltip("The look at change threshold")]private float lookAtChangeThreshold = 0.3f;private Vector3 offsetPos, dragOffset;private Dictionary<int, BezierPointerData> bezierPointerDatas = new Dictionary<int, BezierPointerData>();private bool dragging = false;private void Start(){if (followObj != null){offsetPos = transform.InverseTransformPoint(followObj.position);}}public void SetOrUpdateFollowObj(Transform followObj){this.followObj = followObj;offsetPos = transform.InverseTransformPoint(followObj.position);}private void AddBezierPointerData(PointerEventData eventData){BezierPointerData bezierPointerData = new BezierPointerData{pointerId = eventData.pointerId,hitLocalNormal = transform.InverseTransformVector(eventData.pointerCurrentRaycast.worldNormal),hitLocalPos = transform.InverseTransformPoint(eventData.pointerCurrentRaycast.worldPosition)};if (bezierPointerDatas.ContainsKey(bezierPointerData.pointerId)){bezierPointerDatas[bezierPointerData.pointerId] = bezierPointerData;}else{bezierPointerDatas.Add(bezierPointerData.pointerId, bezierPointerData);}}private void RemoveBezierPointerData(PointerEventData eventData){bezierPointerDatas.Remove(eventData.pointerId);
http://www.dtcms.com/a/251530.html

相关文章:

  • HTML的最基础入门知识,从零开始逐步讲解,适合为后续爬虫技术打基础:
  • 苏州SAP代理商:哲讯科技助力企业数字化转型
  • [python] 堆
  • 贝塞尔曲线的公式推导贝塞尔曲线的公式推导,和 SVG 中 Path 的贝塞尔曲线指令的理解记忆
  • 体验AI智能投资!AI Hedge Fund了解一下
  • Langflow 构建多代理和 RAG 应用的可视化框架
  • STM32103CBT6显示ST7789通过SPI方式显示柬埔寨文
  • 【Dify系列】【Dify 核心功能】【应用类型】【二】【文本生成】
  • 解决虚拟环境中文绘图显示问题
  • RFC4291-IPv6地址架构
  • 计算机求职提前批/求职什么时候投递合适
  • 从0开始学习R语言--Day24--稀疏建模
  • TopNet:基于Transformer的高效点云几何压缩网络模型详解
  • 基于C#部署YoloV5目标检测模型
  • 【系统分析师】2010年真题:综合知识-答案及详解
  • 6月15日星期日早报简报微语报早读
  • Babylon引擎(三)
  • 基于Ultralytics的RT-DETR改进思考
  • BEV 感知算法评价指标简介
  • Appium框架下载时卡主的解决办法(ERR_TLS_CERT_ALTNAME_INVALID)
  • 基于根茎式思维深化后的提示词设计案例
  • 【精选】计算机毕业设计基于SpringBoot高校社团管理系统 社团信息维护 活动发布报名 成员审核与公告发布平台源码+论文+PPT+讲解
  • 智能土木通 - 土木工程专业知识问答系统01:项目简介
  • 4.es、kibana容器的下载安装
  • C#最佳实践:为何应减少方法参数
  • 【python】 args和kwargs区别
  • 【git】有两个远程仓库时的推送、覆盖、合并问题
  • HarmonyOS Grid 网格拖拽完全指南
  • Vue 3 路由跳转全面指南(Composition API + <script setup>)
  • 高效便捷版,多功能一键直达!