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

建设信用卡在网站挂失几步昆明百度搜索排名优化

建设信用卡在网站挂失几步,昆明百度搜索排名优化,extjs做的网站,高负载php网站开发Unity平面映射计算器:MappingCalculate_Plane组件深度解析 概述 MappingCalculate_Plane是一个强大的Unity组件,它能够将3D空间中的任意点投影到指定平面上,并计算出该点在平面局部坐标系中的2D坐标。这个组件非常适合需要将3D位置转换为2D…

Unity平面映射计算器:MappingCalculate_Plane组件深度解析

概述

MappingCalculate_Plane是一个强大的Unity组件,它能够将3D空间中的任意点投影到指定平面上,并计算出该点在平面局部坐标系中的2D坐标。这个组件非常适合需要将3D位置转换为2D平面坐标的各种应用场景。

效果:

在这里插入图片描述

核心功能

  • 3D到2D的平面投影:将任意参考点投影到定义的平面上
  • 实时坐标转换:自动计算投影点在平面局部坐标系中的(x,y)值
  • 事件通知系统:当投影点位置变化时触发事件
  • 可视化调试:内置编辑器辅助工具,直观显示投影关系

技术实现解析

平面投影算法

核心投影算法在PlanarMapping方法中实现:

public Vector3 PlanarMapping(Vector3 planeCenter, Vector3 currentPoint)
{Vector3 normal = transform.up; // 采用自身 transform 的 up 方向作为投影平面法线// 1. 将点投影到平面上Vector3 projectedPos = currentPoint - Vector3.Dot(currentPoint - planeCenter, normal) * normal;// 2. 转换为平面局部坐标Vector3 localOffset = projectedPos - planeCenter;value.x = Vector3.Dot(localOffset, transform.right);   // X轴分量value.y = Vector3.Dot(localOffset, transform.forward); // Y轴分量onValueChanged?.Invoke(value);return projectedPos;
}

这个算法分为两个关键步骤:

  • 空间投影:使用向量点积将3D点垂直投影到平面上

  • 坐标转换:将投影点转换为平面局部2D坐标

实时更新机制

组件通过Update和UpdateMapping方法实现自动更新:

private void Update()
{UpdateMapping();
}public void UpdateMapping()
{if (referencePoint){// 检测参考点位置变化if (lastPosition == Vector3.zero)lastPosition = referencePoint.transform.position;if (referencePoint.transform.position != lastPosition){mappedPosition = PlanarMapping(transform.position, referencePoint.position);}lastPosition = referencePoint.transform.position;// 更新投影点位置if (projectedPoint)projectedPoint.position = mappedPosition;}
}

编辑器可视化

组件提供了丰富的场景视图可视化工具:

public void OnDrawGizmosSelected()
{// 绘制平面网格Vector3 planeCenter = transform.position;Vector3 right = transform.right;Vector3 forward = transform.forward;Gizmos.color = Color.black;int gridSize = 5;float cellSize = 0.1f;// 绘制网格线for (int i = -gridSize; i <= gridSize; i++){// 水平线Vector3 startH = planeCenter + right * (i * cellSize) - forward * (gridSize * cellSize);Vector3 endH = planeCenter + right * (i * cellSize) + forward * (gridSize * cellSize);Gizmos.DrawLine(startH, endH);// 垂直线Vector3 startV = planeCenter + forward * (i * cellSize) - right * (gridSize * cellSize);Vector3 endV = planeCenter + forward * (i * cellSize) + right * (gridSize * cellSize);Gizmos.DrawLine(startV, endV);}// 绘制投影关系if (referencePoint){Gizmos.color = Color.white;Gizmos.DrawLine(referencePoint.position, mappedPosition);Gizmos.DrawSphere(mappedPosition, 0.01f);Handles.Label(mappedPosition, value.ToString());}
}

自定义编辑器扩展

组件还包含了专门的编辑器脚本,增强了场景中的交互体验:

[CustomEditor(typeof(MappingCalculate_Plane))]
public class MappingCalculate_PlaneEditor : Editor
{private void OnSceneGUI(){MappingCalculate_Plane script = (MappingCalculate_Plane)target;if (script.referencePoint){// 添加可拖动的位置手柄EditorGUI.BeginChangeCheck();Vector3 newReferencePos = Handles.PositionHandle(script.referencePoint.position, Quaternion.identity);if (EditorGUI.EndChangeCheck()){Undo.RecordObject(script.referencePoint, "Move Reference Point");script.referencePoint.position = newReferencePos;}// 实时更新投影script.UpdateMapping();}}
}

实际应用场景

  • VR/AR交互:将3D手势位置映射到2D控制平面

  • 游戏UI:在3D空间中创建动态的2D交互区域

  • 建筑可视化:将3D模型位置转换为平面图坐标

  • 动画控制:基于平面坐标控制角色或物体的行为

  • 物理模拟:实现平面约束的运动系统

使用指南

1.将组件添加到GameObject上,该对象的transform定义了投影平面

2.设置referencePoint为需要投影的3D点

3.可选设置projectedPoint来可视化投影结果

4.通过onValueChanged事件监听2D坐标变化

事件系统

组件提供了MappingCalculatePanelEvent事件:

[Serializable]
public class MappingCalculatePanelEvent : UnityEvent<Vector2> { }[SerializeField]
private MappingCalculatePanelEvent m_OnValueChanged = new MappingCalculatePanelEvent();
public MappingCalculatePanelEvent onValueChanged { get { return m_OnValueChanged; } set { m_OnValueChanged = value; } 
}

开发者可以通过Inspector绑定事件响应,或在代码中动态添加监听器。

总结

MappingCalculate_Plane组件为Unity开发者提供了一种高效可靠的3D到2D坐标转换解决方案。通过清晰的数学实现和丰富的可视化工具,它大大简化了空间映射相关的开发工作。无论是游戏开发、交互设计还是数据可视化,这个组件都能发挥重要作用。

相比之前介绍的线性映射组件,这个平面映射版本提供了更全面的空间转换能力,适合需要处理更复杂空间关系的项目。开发者可以根据实际需求选择使用,或者将两者结合实现更高级的空间映射系统。

Demo下载地址

http://www.dtcms.com/wzjs/2805.html

相关文章:

  • 怎么做电子商务的网站站长统计app进入网址新版
  • 做网站被网监叫去很多次域名归属查询
  • 设计有特色的网站郑州网站优化培训
  • 2023年防疫新政策免费seo快速收录工具
  • 有没有做文创的网站seo搜索引擎实战详解
  • 江苏南京建设局官方网站极速建站网站模板
  • WordPress实验室网站seo方案模板
  • 长沙有网站建站吗学做电商需要多少钱
  • 国际购物网站排名上海网络推广专员
  • 造价师证书在建设部网站查询深圳网络推广代理
  • 深圳工信部网站备案seo搜索引擎优化求职简历
  • 怎样给一个公司做网站百度数据研究中心官网
  • 怎样做网站的用户分析产品推广策划方案
  • APP网站建设什么用处网页设计主题推荐
  • 建设银行官方网站下载安装北京最新疫情最新消息
  • 什么网站可以做全景图营销模式有哪些 新型
  • 网站内容收费互联网广告是做什么的
  • 党建网站织梦模板网站软件免费下载
  • 餐饮设计网站建设推广方案万能模板
  • dreamweaver做的网站seo优化交流
  • 别人在百度冒用公司旗号做网站seo搜索引擎专员
  • 免费优化网站网上竞价
  • 做emc的有哪些网站广东公司搜索seo哪家强
  • 分类信息网站有哪些东莞seo优化推广
  • 深圳家居网站建设公司短视频广告投放平台
  • 昆明婚恋网站价格推广引流渠道
  • 做图的ppt模板下载网站河北高端网站建设
  • 企业网站建设用标语seo分析网站
  • 郴州网站优化公司网络营销案例有哪些
  • 怎么把dw做的网站分享给别海南网站网络推广