GZUCM_VRVideo 传送系统
• 1 min read 1 min • 222 words 222 words
传送系统是 GZUCM_VRVideo 项目的核心导航功能,通过基于标签的传送机制实现 VR 环境中的快速位置移动。
系统组成
1. TeleportManager(传送管理器)
文件: TeleportManager.cs
核心功能:
- 管理传送目的地配置
- 处理传送确认流程
- 控制菜单显示/隐藏
- 集成输入系统
关键组件:
public InputActionReference Open_Btn; // 打开菜单的输入动作
public XROrigin xrRig; // XR Rig 引用
public List<TeleportDestination> destinations; // 传送目的地列表
public GameObject Menu; // 菜单 UI
public GameObject TipsPage; // 提示页面
2. TeleportDestination(传送目的地)
文件: TeleportManager.cs (内部类)
数据结构:
[System.Serializable]
public class TeleportDestination
{
public Button button; // 触发传送的按钮
public string tag; // 目标物体的标签
}
传送流程
1. 菜单打开
输入动作触发 → OpenMenu() → 切换菜单显示状态
2. 目的地选择
按钮点击 → OpenTips(tag) → 显示确认对话框
3. 传送确认
确认按钮点击 → ChangeScene() → TeleportToTag(tag) → 位置移动
4. 传送取消
取消按钮点击 → Cancle() → 隐藏提示框,显示菜单
关键算法
1. 基于标签的传送
public void TeleportToTag(string tag)
{
GameObject targetLocation = GameObject.FindGameObjectWithTag(tag);
if (targetLocation != null)
{
xrRig.transform.position = targetLocation.transform.position;
}
else
{
Debug.LogWarning("No GameObject found with tag: " + tag);
}
}
2. 动态按钮事件绑定
void Start()
{
// 为每个目的地添加按钮点击事件
foreach (var destination in destinations)
{
destination.button.onClick.AddListener(delegate { OpenTips(destination.tag); });
}
}
3. 输入系统集成
void Awake()
{
// 绑定输入动作事件
Open_Btn.action.performed += OpenMenu;
}
UI 控制逻辑
菜单状态管理
public void OpenMenu(InputAction.CallbackContext context)
{
// 切换菜单显示状态
Menu.SetActive(!Menu.activeSelf);
if (Menu.activeSelf)
{
TipsPage.SetActive(false);
}
}
提示框管理
void OpenTips(string tag)
{
GameObject targetLocation = GameObject.FindGameObjectWithTag(tag);
if (targetLocation != null)
{
string objectName = targetLocation.name;
TargetName = tag;
TipsPage.SetActive(true);
Menu.SetActive(false);
Tips_text.text = "确定传送到 " + objectName + " 吗?";
}
}
配置指南
1. 场景设置
- TeleportManager: 场景中放置一个管理器
- xrRig: 拖入 XR Origin 引用
- destinations: 配置传送目的地列表
2. 目的地配置
- 创建传送点: 在场景中放置空物体作为传送目标
- 设置标签: 为每个传送点设置唯一标签
- 配置按钮: 在 UI 中创建对应按钮
- 关联配置: 将按钮和标签添加到 destinations 列表
3. 输入配置
- InputActionReference: 配置打开菜单的输入动作
- XR Input: 配置手柄按钮映射
交互流程示例
完整传送流程
- 用户按下菜单按钮 → 打开传送菜单
- 选择目的地 → 显示确认对话框
- 确认传送 → 移动到目标位置
- 自动关闭菜单 → 返回 VR 场景
取消流程
- 选择目的地 → 显示确认对话框
- 取消传送 → 关闭提示框,返回菜单
高级功能
1. 多级菜单支持
- 支持嵌套菜单结构
- 支持返回上级菜单
- 支持菜单状态记忆
2. 传送动画
- 可集成 DOTween 实现平滑传送
- 支持传送特效
- 支持传送音效
3. 传送限制
- 支持传送冷却时间
- 支持传送条件检查
- 支持传送权限控制
调试方法
1. 传送调试
- 检查标签是否正确设置
- 验证传送点位置
- 监控传送事件日志
2. UI 调试
- 检查按钮事件绑定
- 验证 UI 显示状态
- 监控 UI 交互日志
3. 常见问题
- 无法传送: 检查标签和传送点配置
- 菜单不显示: 检查 UI 引用和状态
- 输入无响应: 检查 InputAction 配置
扩展可能性
1. 传送类型扩展
- 支持瞬移传送
- 支持平滑传送
- 支持传送动画
2. 传送条件
- 支持解锁条件
- 支持冷却时间
- 支持资源消耗
3. 传送历史
- 记录传送历史
- 支持快速传送
- 支持收藏传送点
相关页面
- GZUCM_VRVideo Unity项目 — 主项目页面
- GZUCM_VRVideo媒体展示系统 — 媒体展示系统
- GZUCM_VRVideo交互系统 — 交互系统
- GZUCM_VRVideo UI系统 — UI 系统