相机控制 (Camera Control)
在运行时控制相机移动和聚焦,以跟踪移动对象、创建电影化视角或引导用户浏览您的数字孪生。
新功能:CameraFollowObject 组件自 realvirtual 6.0.7 版本起可用。
概览 (Overview)
realvirtual 提供全面的相机控制功能,用于运行时的导航、对象跟踪和预设相机位置。系统设计用于无需代码的 Inspector 配置和脚本集成,使设计师可以轻松使用,同时为开发人员保持强大功能。
注意 本部分涵盖用于跟随对象和加载预设位置的运行时相机控制功能。有关运行时使用鼠标/键盘的标准场景导航(平移、旋转、缩放、第一人称模式),请参见主 Runtime UI 文档。
相机控制选项 (Camera Control Options)
realvirtual 提供三种互补的相机控制方法:
1. 相机位置预设(CameraPosition 组件) 推荐初学者使用
- 将完整相机视图保存为可重用的预设资产
- 无需任何编码即可创建相机导航按钮
- 自动加载启动位置
- 键盘快捷键和触摸手势用于快速访问
- 适用于:多视图仪表板、导览、预设导航
2. 对象跟随和聚焦(CameraFollowObject 组件)
- 连续跟踪移动对象(跟随模式)
- 一次性平滑过渡以查看特定对象(聚焦模式)
- 自动计算距离和角度或自定义定位
- 跟随期间可选用户控制(旋转/缩放)
- 适用于:AGV 跟踪、过程监控、操作员注意力管理
3. 直接相机控制(SceneMouseNavigation API)
- 从脚本编程控制相机定位
- 与自动化逻辑的高级集成
- 自定义相机序列和动画
- 适用于:自动化演示、复杂相机运动、自定义 UI
常见用例
- 相机预设导航 - 通过按钮、键盘或手势快速访问预定义视图
- AGV/移动机器人跟踪 - 跟随自主车辆穿过设施
- 过程可视化 - 在演示期间聚焦特定机器或操作
- 导览 - 创建自动相机序列,突出显示关键区域
- 多视图仪表板 - 为操作员提供对不同设施区域的即时访问
- 操作员培训 - 将用户注意力引导到重要组件
- 远程监控 - 实时跟踪关键移动设备
相机控制与 PLC 信号、UI 按钮和脚本无缝集成,适用于自动化序列和用户控制的交互。
相机位置预设 - 无需代码方法
CameraPosition 组件系统提供了最简单的方式,无需任何编码即可创建相机导航。它允许您将完整相机视图保存为可重用的预设资产,并通过按钮、键盘快捷键或触摸手势触发它们。
工作原理
CameraPosition 系统由两部分组成:
- CameraPos ScriptableObject 资产 - 存储相机状态(位置、旋转、距离、正交设置)
- CameraPosition 组件 - 在触发时加载和激活相机预设
这种分离允许您创建可在不同按钮、键盘快捷键和自动化触发器之间重用的相机视图库。

创建相机位置预设 (Creating Camera Position Presets)
按照以下步骤创建和保存相机位置预设:
在编辑模式下:
- 创建 ScriptableObject 资产
- 在 Project 窗口中右键点击 → Create > realvirtual > Add Camera Position
- 给资产起一个描述性名称(例如,"MainOverview"、"RobotStation1"、"TopView")
- 将 CameraPosition 组件附加到主相机 (Main Camera)
- 在 Hierarchy 中选择 Main Camera(
/realvirtual/Main Camera) - 点击 Add Component → 搜索 CameraPosition
- 在 Hierarchy 中选择 Main Camera(
- 分配 ScriptableObject 资产
- 在 CameraPosition 组件中,将 CameraPos 资产分配给 Campos 属性
在播放模式下:
- 启动仿真
- 按 Play 按钮进入播放模式
- 定位 Game 视图相机
- 使用 realvirtual 运行时控件将相机导航到所需视图:
- 鼠标中键 + 拖动 - 平移相机
- 鼠标右键 + 拖动 - 围绕枢轴点旋转相机
- 鼠标滚轮 - 放大/缩小
- 使用 realvirtual 运行时控件将相机导航到所需视图:
- 保存当前位置
- 保持 Main Camera 选中,在 Inspector 中找到 CameraPosition 组件
- 点击 "Save current Position" 按钮
- CameraPos 资产现在存储了当前的 Game 视图相机位置
重要 相机位置必须在播放模式下 Game 视图相机激活时保存。"Save current Position" 按钮捕获运行时相机的当前位置和旋转。
提示 为数字孪生中的不同区域或视图创建多个 CameraPos 资产。构建预设库,如 "Overview"、"DetailView1"、"DetailView2"、"TopView"、"SideView",以实现全面的导航。
将 CameraPosition 添加到场景
相机位置组件通常添加到 Main Camera(/realvirtual/Main Camera)以管理不同的相机视图。
步骤 1:将 CameraPosition 组件添加到 Main Camera
- 在 Hierarchy 中选择 Main Camera(
/realvirtual/Main Camera) - 在 Inspector 中点击 Add Component
- 搜索并添加 CameraPosition
- 将 CameraPos 资产分配给 Campos 属性
- 配置激活设置(键盘快捷键、启动时激活等)
步骤 2:添加多个 CameraPosition 组件(可选)
您可以向 Main Camera 添加多个 CameraPosition 组件,每个配置为不同的视图:
- 向同一 Main Camera 添加另一个 CameraPosition 组件
- 分配不同的 CameraPos 资产(例如 "TopView"、"DetailView")
- 设置不同的 Key Code(例如 F1 用于第一个视图,F2 用于第二个视图)
- 为其他预设视图重复
步骤 3:连接到 UI 按钮(可选)
对于基于按钮的导航:
- 选择 UI 按钮 GameObject
- 在 Button 组件的 OnClick 事件列表中,点击 +
- 将 Main Camera GameObject 拖到对象字段
- 从函数下拉菜单中选择 CameraPosition > SetCameraPosition()
- 如果 Main Camera 上有多个 CameraPosition 组件,选择要触发的特定组件
CameraPosition 属性
基本配置
Name(字符串)- 此相机位置的显示名称。在运行时 UI 中显示,可用于识别。默认:"Main Camera"
Campos(CameraPos 资产)- 要加载的相机位置预设资产。此 ScriptableObject 包含保存的相机状态(位置、旋转、距离、正交设置)。分配您之前创建的 CameraPos 资产。
激活方法
View Name(字符串)- 此视图的可选标识符。可用于脚本查找或显示目的。示例:"View1"、"Overview"、"DetailStation"
Key Code(KeyCode)- 激活此相机位置的键盘快捷键。在运行时按此键即可立即加载预设视图。示例:
- F1、F2、F3 - 用于快速视图切换的功能键
- Alpha1、Alpha2 - 用于编号视图的数字键
- None - 禁用键盘激活
Activate On Start(布尔值)- 启用时,此相机位置在播放模式启动或组件启用时自动加载。用于默认启动视图。
警告 仅在一个 CameraPosition 组件上启用 Activate On Start。启用此设置的多个组件会发生冲突。
Double Tap Gesture(触摸交互)- 为移动或触摸屏界面配置触摸手势激活:
- None - 禁用触摸手势激活
- Touch Interaction GameObject - 分配管理手势的触摸交互组件
- 当分配且用户执行双击手势时,此相机位置激活
这使得触摸屏用户能够使用熟悉的双击手势在视图之间快速导航。
Inspector 按钮
CameraPosition 组件在 Inspector 中提供两个方便的按钮:
- Save current Position - 捕获当前场景视图相机状态并更新分配的 CameraPos 资产
- Set Camera to saved Position - 从分配的 CameraPos 资产加载相机视图
这些按钮在编辑模式和播放模式下均可使用,允许您在开发期间测试和优化相机位置。
工作流提示 使用"Save current Position"在改进视图时快速更新预设。在 Scene 视图中导航到所需位置,然后点击按钮更新资产,无需离开 Inspector。
常见设置模式
模式 1:UI 按钮导航(无需编码)
为不同视图创建导航面板:
- 为不同区域创建 3-5 个 CameraPos 资产(Overview、Station1、Station2 等)
- 选择 Main Camera 并添加 3-5 个 CameraPosition 组件(每个视图一个)
- 为每个 CameraPosition 组件分配不同的 CameraPos 资产
- 向 Canvas 添加 UI 按钮
- 将每个按钮的 OnClick 事件连接到 Main Camera > CameraPosition > SetCameraPosition()
- 为每个按钮选择特定的 CameraPosition 组件
结果:用户点击按钮即可在预定义视图之间即时导航。
模式 2:键盘快捷键
为高级用户提供键盘快捷键:
- 在 Hierarchy 中选择 Main Camera
- 向 Main Camera 添加多个 CameraPosition 组件
- 为每个组件分配不同的 CameraPos 资产
- 为每个 CameraPosition 设置不同的 KeyCode(F1、F2、F3 等)
- 将所有组件的 Active 设置为 "PlayModeOnly"
结果:按 F1-F5 即可在 5 个预设视图之间即时切换。
模式 3:自动启动视图
设置场景启动时的默认相机位置:
- 在 Hierarchy 中选择您的 Main Camera
- 在 SceneMouseNavigation 组件上配置相机位置设置:
- Last Camera Position - 分配默认启动视图 CameraPos 资产
- Set Camera Pos On Start Play - 启用以在启动时加载此位置
- Save Camera Pos On Quit - 启用以在退出播放模式时保存当前相机状态
- Set Editor Camera Pos - 启用以将 Scene 视图与保存的位置同步
- Interpolate To New Camerapoitions - 启用以实现平滑的相机过渡
重要:Save Camera Pos On Quit 当您想捕获最终相机位置时,临时启用 Save Camera Pos On Quit。一旦设置了永久启动位置,禁用此设置以防止它每次退出播放模式时覆盖您的预设。仅当您希望相机位置在会话之间动态更新时才保持启用。
结果:场景始终从相同的专业概览位置开始。
模式 4:组合方法

组合所有方法以获得最大灵活性:
- 在 SceneMouseNavigation 上配置启动位置(模式 3)
- 为常用视图添加 UI 按钮(模式 1)
- 为高级用户添加键盘快捷键(模式 2)
- 可选:为移动端添加双击手势(配置 Touch Interaction)
结果:支持多种用户偏好和设备的完整导航系统。
重要:避免相机系统之间的冲突
当组合多种相机控制方法时(CameraPosition、CameraFollowObject 和 SceneMouseNavigation 设置),注意避免冲突:
* 仅一个 "Activate On Start":仅在一个 CameraPosition 组件上启用 "Activate On Start"。启用此设置的多个组件会发生冲突。
* 不要并行设置位置:避免同时触发多个相机位置更改(例如,在相机位置动画时启动跟随模式)。
* SceneMouseNavigation vs CameraPosition 启动:如果使用 CameraPosition 的 "Activate On Start",请禁用 SceneMouseNavigation 上的 "Set Camera Pos On Start Play",以避免两个系统都尝试设置启动位置。
* 跟随模式优先:当 CameraFollowObject 正在主动跟随对象时,相机位置更改被阻止,直到跟随停止。
* 顺序过渡:如果您需要组合不同的相机运动(例如,加载位置,然后开始跟随),请使用脚本或 Events 以适当的延迟顺序触发它们。
Camera Position vs CameraFollowObject
使用 CameraPosition 当:
- 您需要预定义的静态相机视图
- 在固定视点之间创建导航(例如工厂的不同区域)
- 设置启动相机位置
- 构建多视图仪表板
- 无需编码
使用 CameraFollowObject 当:
- 您需要跟踪移动对象(AGV、机器人、传送带)
- 创建跟随运动的动态相机
- 在演示期间将注意力集中在特定组件上
- 将跟随与用户控制结合(跟踪期间的旋转/缩放)
两个系统可以在同一场景中一起使用,实现全面的相机控制。
CameraFollowObject 组件
CameraFollowObject 组件控制连续跟随和一次性聚焦操作的相机行为。与加载静态预设视图的 CameraPosition 不同,CameraFollowObject 创建动态相机行为,实时跟踪移动对象或平滑过渡到特定组件上。

添加 CameraFollowObject
- 将组件添加到场景中的任何 GameObject(通常附加到 UI 按钮)
- 将 Object To Follow 属性分配给目标 GameObject
- 根据需要配置距离和角度设置
- 连接到按钮或 PLC 信号进行触发
属性
目标对象
Object To Follow(GameObject)- 要跟踪或聚焦的 GameObject。可以是场景中的任何对象,包括 MU、机器人、传送带或机器组件。相机会自动从所有子级渲染器计算对象的包围盒中心。
相机距离
Use Custom Distance(布尔值)- 控制是使用手动指定距离还是自动计算最佳观看距离。禁用时,相机自动计算以大约 1/3 屏幕空间适应对象所需的距离,提供舒适的观看大小,清晰地显示对象而不填满整个帧。
Distance(浮点,米)- 当 Use Custom Distance 启用时,相机距离对象中心的距离。调整此值以控制相机离目标的远近。典型值范围从小物体的 2 米到大型设备的 20 米。
相机角度
Use Custom View Angle(布尔值)- 控制是使用手动指定的相机旋转还是自动选择最佳角度。对 FocusOnObject 禁用时,相机计算略高于对象并从侧面偏移的最佳视点。对 StartFollowing 禁用时,保持当前相机角度。
View Angle(Vector3,度)- 当 Use Custom View Angle 启用时,欧拉角(X、Y、Z)的相机旋转。使用此设置精确的相机方向,如俯视图(90、0、0)或侧视图(0、90、0)。
用户控制选项
Allow Rotation(布尔值)- 在跟随模式下启用时,用户可以使用鼠标或触摸输入围绕对象旋转相机,同时保持对象居中。这对于操作员需要从不同角度检查移动设备的检查场景非常有用。
Allow Zoom(布尔值)- 在跟随模式下启用时,用户可以使用滚轮或捏合手势调整相机距离,同时保持焦点在目标上。与 Allow Rotation 结合使用,可在跟踪期间实现完全用户控制。
平滑度
Lerp Speed(浮点,0.1-10.0)- 控制在跟随模式下相机跟踪的平滑度。较低的值(0.1-0.5)创建平滑的电影般运动,中等值(0.5-2.0)提供平衡的跟踪,较高值(2.0-10.0)创建紧密响应的跟踪。默认:1.0
Smooth Start(布尔值)- 启用时,相机在开始跟随时平滑过渡到对象。禁用时,相机立即跳到跟随位置。为专业演示启用,为监控场景中的即时响应禁用。
停止按钮 UI
Show Stop Button(布尔值)- 启用时,在相机跟随模式下显示一个 UI 按钮,允许用户停止相机跟踪。按钮在跟随开始时自动出现,在跟随停止时消失。这为用户提供了清晰可见的退出跟随模式的方式,无需键盘快捷键或外部按钮。

Stop Button Prefab(GameObject)- 停止按钮 UI 的可选自定义预制件。如果为空,使用来自 Resources 的默认 rvUICameraFocusButton prefab。如果要自定义按钮的外观、位置或文本,请在此处分配自定义预制件。自定义预制件必须具有 rvUICameraFocusButton 组件。
Stop On Mouse Click(布尔值)- 启用时,如果用户点击任意鼠标按钮,跟随自动停止。这提供了另一种通过简单点击视口任意位置退出跟随模式的方式。
跟随模式
Auto Start Following(布尔值)- 当场景启动或组件启用时,自动开始跟随目标对象。当跟踪应立即开始时启用,例如启动演示或监控视图。
PLC 信号控制
PLC Signal Start Following(PLCInputBool)- 控制跟随模式的 PLC 信号。当信号转为 true 时,跟随开始。当信号返回 false 时,跟随自动停止。用于由 PLC 逻辑控制的自动化序列。
Follow Active(布尔值)- 可由脚本或 PLCOutputBool 组件外部控制的公共布尔值属性。设置为 true 开始跟随,false 停止。这为脚本场景或 UI 切换按钮提供了 PLC 信号的替代方案。
提示
PLC 信号监控使用 FixedUpdate 时间以确保与 PLC 通信周期同步。PLC 信号或 Follow Active 布尔值都可以触发跟随——两者不需要同时为 true。
控制方法
CameraFollowObject 组件提供三个主要方法,可从 UI 按钮、脚本或其他事件触发:
StartFollowing()
开始对目标对象的连续相机跟踪。相机将平滑移动到配置的观看位置,然后随着对象的移动连续更新其位置以保持对象居中。跟随持续进行,直到明确调用 StopFollowing() 或控制信号设置为 false 停止。
用例:
- 跟踪穿过仓库的 AGV
- 在操作序列期间跟随机器人手臂
- 监控关键产品的传送带运输
- 演示中的自动化相机序列
按钮设置: 向 UI 添加按钮,并将其 OnClick 事件连接到 CameraFollowObject.StartFollowing()。对于切换行为,改用 ToggleFollowing()。
StopFollowing()
结束连续相机跟踪,将相机返回到正常用户控制的导航模式。相机保持在其当前位置和旋转,允许用户自由导航。
用例:
- 结束自动化跟踪序列
- 将控制权交还给操作员
- 在跟踪对象之间切换
FocusOnObject()
执行一次性平滑相机移动以查看目标对象而不进行连续跟踪。相机将内插到最佳观看位置,但如果之后对象移动,则不会继续跟随。这非常适合导览或将注意力吸引到特定组件。
用例:
- 在演示期间突出特定机器
- 创建基于航点的导览
- 快速导航到特定区域
- 培训场景中的操作员注意力管理
ToggleFollowing()
在跟随和非跟随状态之间切换。如果当前正在跟随,此方法停止跟踪。如果没有跟随,则开始跟踪。适用于 UI 中的切换按钮。
Inspector 按钮
组件在 Inspector 中直接提供三个按钮,用于开发期间的测试:
- Start Following - 测试连续跟踪
- Stop Following - 结束跟踪
- Focus On Object - 测试一次性聚焦
这些按钮在编辑模式和播放模式下均可使用,允许您在场景设置期间预览相机行为。
距离和角度自动计算 (Distance and Angle Auto-Calculation)
当自定义距离或角度选项禁用时,相机使用智能自动计算:
自动距离计算:
- 分析目标对象及其子级上的所有渲染器
- 计算合并的包围盒尺寸
- 确定以 1/3 屏幕空间适应对象的距离
- 基于对象大小添加安全边距
- 确保对象清晰可见,不会太近或太远
自动角度计算:
- FocusOnObject:计算略高于并从对象中心偏移的最佳视点,以获得最佳可见性
- StartFollowing:保持当前相机角度,避免在跟踪期间让用户迷失方向
提示
自动计算最适用于具有 MeshRenderer 或 SkinnedMeshRenderer 组件的对象。对于没有渲染器的对象,相机使用对象的变换位置和 5 米的默认距离。
通过代码设置相机位置
对于高级场景,您可以使用 SceneMouseNavigation 公共 API 程序化控制相机位置。这对于创建自定义相机序列、自动化逻辑或基于仿真事件的动态相机运动非常有用。
访问 SceneMouseNavigation
SceneMouseNavigation 组件位于 Main Camera 上。有几种方法可以获取对它的引用:
方法 1:FindObjectOfType(推荐 - 简单可靠)
using realvirtual;
// Find the SceneMouseNavigation component in the scene
SceneMouseNavigation sceneNav = FindObjectOfType<SceneMouseNavigation>();
方法 2:通过 Main Camera GameObject
using realvirtual;
// Get reference via specific GameObject path
GameObject mainCamera = GameObject.Find("/realvirtual/Main Camera");
SceneMouseNavigation sceneNav = mainCamera.GetComponent<SceneMouseNavigation>();
方法 3:使用 Camera.main
using realvirtual;
// Get reference via Unity's main camera
SceneMouseNavigation sceneNav = Camera.main.GetComponent<SceneMouseNavigation>();
提示 使用 FindObjectOfType() 获得最简单和最可靠的方法。无论相机的确切层次结构路径如何,它都可以工作。
SetNewCameraPosition 方法
程序化相机控制的主要方法:
public void SetNewCameraPosition(Vector3 targetPos, float camDistance, Vector3 camRotation, bool noInterpolate = false)
参数:
- targetPos(Vector3)- 相机注视的世界位置(轨道中心点)
- camDistance(float)- 目标与相机之间的距离,以米为单位
- camRotation(Vector3)- 欧拉角(X, Y, Z)的相机旋转,以度为单位
- noInterpolate(bool)- 如果 true,立即跳转;如果 false,平滑内插到位置(默认:false)
示例 - 将相机移动到特定位置:
using UnityEngine;
using realvirtual;
public class CameraController : MonoBehaviour
{
private SceneMouseNavigation sceneNav;
void Start()
{
// Get SceneMouseNavigation reference
sceneNav = FindObjectOfType<SceneMouseNavigation>();
}
public void MoveCameraToStation1()
{
// Define target position, distance, and rotation
Vector3 targetPosition = new Vector3(10f, 0f, 5f); // Look at point
float distance = 8f; // 8 meters from target
Vector3 rotation = new Vector3(30f, 45f, 0f); // Camera angle
// Move camera with smooth interpolation
sceneNav.SetNewCameraPosition(targetPosition, distance, rotation, noInterpolate: false);
}
public void JumpCameraToOverview()
{
// Jump instantly without interpolation
Vector3 targetPosition = new Vector3(0f, 0f, 0f);
float distance = 15f;
Vector3 rotation = new Vector3(45f, 90f, 0f);
sceneNav.SetNewCameraPosition(targetPosition, distance, rotation, noInterpolate: true);
}
}
示例 - 使用协程的相机序列:
using System.Collections;
using UnityEngine;
using realvirtual;
public class CameraTour : MonoBehaviour
{
private SceneMouseNavigation sceneNav;
void Start()
{
GameObject mainCamera = GameObject.Find("/realvirtual/Main Camera");
sceneNav = mainCamera.GetComponent<SceneMouseNavigation>();
}
public void StartTour()
{
StartCoroutine(CameraTourSequence());
}
IEnumerator CameraTourSequence()
{
// Position 1: Overview
sceneNav.SetNewCameraPosition(new Vector3(0, 0, 0), 20f, new Vector3(45, 0, 0));
yield return new WaitForSeconds(3f);
// Position 2: Station A
sceneNav.SetNewCameraPosition(new Vector3(10, 0, 5), 8f, new Vector3(30, 45, 0));
yield return new WaitForSeconds(3f);
// Position 3: Station B
sceneNav.SetNewCameraPosition(new Vector3(-10, 0, -5), 8f, new Vector3(30, -45, 0));
yield return new WaitForSeconds(3f);
}
}
使用 CameraPos 资产
您也可以程序化加载 CameraPos 资产:
using UnityEngine;
using realvirtual;
public class LoadCameraPreset : MonoBehaviour
{
public CameraPos overviewPosition; // Assign in Inspector
private SceneMouseNavigation sceneNav;
void Start()
{
GameObject mainCamera = GameObject.Find("/realvirtual/Main Camera");
sceneNav = mainCamera.GetComponent<SceneMouseNavigation>();
}
public void LoadPreset()
{
if (overviewPosition != null)
{
sceneNav.SetNewCameraPosition(
overviewPosition.TargetPosition,
overviewPosition.Distance,
overviewPosition.Rotation,
noInterpolate: false
);
}
}
}
内插控制 (Interpolation Control)
使用 SceneMouseNavigation 属性控制平滑相机过渡:
- InterpolateToNewCamerapoitions(bool)- 启用/禁用平滑内插
- CameraInterpolationSpeed(float)- 相机过渡速度(默认:0.1)
// Disable interpolation for instant jumps
sceneNav.InterpolateToNewCamerapoitions = false;
sceneNav.SetNewCameraPosition(targetPos, distance, rotation);
// Re-enable with custom speed
sceneNav.InterpolateToNewCamerapoitions = true;
sceneNav.CameraInterpolationSpeed = 0.05f; // Slower transitions
sceneNav.SetNewCameraPosition(targetPos, distance, rotation);
程序化跟随对象
对于通过代码连续跟踪对象,使用 SceneMouseNavigation 中的 StartFollowing 方法:
public void StartFollowing(GameObject targetObject, float? distance = null, Vector3? viewAngle = null,
bool allowRotation = false, bool allowZoom = false, float lerpSpeed = 1.0f,
bool smoothStart = true, bool stopOnMouseClick = false)
参数:
- targetObject(GameObject)- 要跟随的对象
- distance(float?,可选)- 相机距离,以米为单位。如果为 null,根据对象包围盒自动计算
- viewAngle(Vector3?,可选)- 欧拉角的相机旋转。如果为 null,使用当前角度(StartFollowing)或最佳角度(FocusOnObject)
- allowRotation(bool)- 如果 true,用户可以在跟随时旋转相机
- allowZoom(bool)- 如果 true,用户可以在跟随时放大/缩小
- lerpSpeed(float)- 平滑因子(0.1 = 电影级,10.0 = 即时)
- smoothStart(bool)- 如果 true,平滑过渡到对象。如果 false,立即跳转
- stopOnMouseClick(bool)- 如果 true,当用户点击任意鼠标按钮时停止跟随
示例 - 跟随移动的 AGV:
using UnityEngine;
using realvirtual;
public class AGVTracker : MonoBehaviour
{
public GameObject agv;
private SceneMouseNavigation sceneNav;
void Start()
{
sceneNav = FindObjectOfType<SceneMouseNavigation>();
}
public void StartTrackingAGV()
{
// Follow AGV with auto-calculated distance, allowing user rotation and zoom
sceneNav.StartFollowing(
targetObject: agv,
distance: null, // Auto-calculate optimal distance
viewAngle: null, // Maintain current camera angle
allowRotation: true, // User can orbit around AGV
allowZoom: true, // User can zoom in/out
lerpSpeed: 0.3f, // Smooth cinematic tracking
smoothStart: true, // Smooth transition to AGV
stopOnMouseClick: false // Continue following even if user clicks
);
}
public void StopTracking()
{
sceneNav.StopFollowing();
}
}
示例 - 使用自定义设置聚焦机器:
public void FocusMachineOnError(GameObject machine)
{
SceneMouseNavigation sceneNav = FindObjectOfType<SceneMouseNavigation>();
// Focus on machine with specific distance and angle
sceneNav.FocusOnObject(
machine,
distance: 8f, // 8 meters from machine
viewAngle: new Vector3(30, 45, 0) // View from 30° up, 45° around
);
}
提示 对于按钮触发的跟随,使用 CameraFollowObject 组件,它提供无需编码的 Inspector 配置。对于基于事件的动态代码跟踪(例如,基于事件跟随不同对象),直接使用 SceneMouseNavigation.StartFollowing()。
© 2025 realvirtual GmbH https://realvirtual.io - 版权所有。未经出版商事先书面许可,不得以任何形式或任何方式(包括打印、保存、影印、录制或其他电子或机械方法)复制、分发或传输本出版物的任何部分。