Unity与Vuforia脚本报错修复及触屏音频控制需求
Vuforia触屏控制音频脚本报错修复及功能实现
现有脚本代码
using UnityEngine; using Vuforia; public class TouchInput_1 : MonoBehaviour, ITrackableEventHandler { private TrackableBehaviour mTrackableBehaviour; public GameObject temploMaiaObject; // Reference to the 3D object named "Templo_Maia" private AudioSource audioSource; private bool isPlaying = false; void Start() { audioSource = temploMaiaObject.GetComponent<AudioSource>(); // Register this script to trackable event handler mTrackableBehaviour = GetComponent<TrackableBehaviour>(); if (mTrackableBehaviour) { mTrackableBehaviour.RegisterTrackableEventHandler(this); } } void OnDestroy() { // Unregister this script from trackable event handler if (mTrackableBehaviour) { mTrackableBehaviour.UnregisterTrackableEventHandler(this); } } public void OnTrackableStateChanged(TrackableBehaviour.Status previousStatus, TrackableBehaviour.Status newStatus) { if (newStatus == TrackableBehaviour.Status.DETECTED || newStatus == TrackableBehaviour.Status.TRACKED || newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED) { // Target is detected and being tracked Debug.Log("Target is detected!"); // Enable touch input enabled = true; } else { // Target is lost or not being tracked Debug.Log("Target is lost!"); // Disable touch input enabled = false; // Pause audio playback if (isPlaying) {
检测到的编译错误
| Severity | Code | Description | Project | File | Line | Suppression State |
|---|---|---|---|---|---|---|
| Error | CS0246 | 找不到类型或命名空间名称“ITrackableEventHandler”(是否缺少 using 指令或程序集引用?) | Assembly-CSharp | M:\IS MOTION PROJECT\PROJETO\AR\Projeto_3D\Projeto_02\Assets\TouchInput_1.cs | 4 | Active |
| Error | CS1513 | 应包含 } | Assembly-CSharp | M:\IS MOTION PROJECT\PROJETO\AR\Projeto_3D\Projeto_02\Assets\TouchInput_1.cs | 54 | Active |
| Error | CS1513 | 应包含 } | Assembly-CSharp | M:\IS MOTION PROJECT\PROJETO\AR\Projeto_3D\Projeto_02\Assets\TouchInput_1.cs | 54 | Active |
| Error | CS1513 | 应包含 } | Assembly-CSharp | M:\IS MOTION PROJECT\PROJETO\AR\Projeto_3D\Projeto_02\Assets\TouchInput_1.cs | 54 | Active |
| Error | CS1513 | 应包含 } | Assembly-CSharp | M:\IS MOTION PROJECT\PROJETO\AR\Projeto_3D\Projeto_02\Assets\TouchInput_1.cs | 54 | Active |
| Error | CS0246 | 找不到类型或命名空间名称“TrackableBehaviour”(是否缺少 using 指令或程序集引用?) | Assembly-CSharp | M:\IS MOTION PROJECT\PROJETO\AR\Projeto_3D\Projeto_02\Assets\TouchInput_1.cs | 6 | Active |
| Error | CS0246 | 找不到类型或命名空间名称“TrackableBehaviour”(是否缺少 using 指令或程序集引用?) | Assembly-CSharp | M:\IS MOTION PROJECT\PROJETO\AR\Projeto_3D\Projeto_02\Assets\TouchInput_1.cs | 32 | Active |
| Error | CS0246 | 找不到类型或命名空间名称“TrackableBehaviour”(是否缺少 using 指令或程序集引用?) | Assembly-CSharp | M:\IS MOTION PROJECT\PROJETO\AR\Projeto_3D\Projeto_02\Assets\TouchInput_1.cs | 32 | Active |
| Error | CS0246 | 找不到类型或命名空间名称“TrackableBehaviour”(是否缺少 using 指令或程序集引用?) | Assembly-CSharp | M:\IS MOTION PROJECT\PROJETO\AR\Projeto_3D\Projeto_02\Assets\TouchInput_1.cs | 16 | Active |
| Error | CS0103 | 当前上下文中不存在名称“TrackableBehaviour” | Assembly-CSharp | M:\IS MOTION PROJECT\PROJETO\AR\Projeto_3D\Projeto_02\Assets\TouchInput_1.cs | 34 | Active |
| Error | CS0103 | 当前上下文中不存在名称“TrackableBehaviour” | Assembly-CSharp | M:\IS MOTION PROJECT\PROJETO\AR\Projeto_3D\Projeto_02\Assets\TouchInput_1.cs | 35 | Active |
| Error | CS0103 | 当前上下文中不存在名称“TrackableBehaviour” | Assembly-CSharp | M:\IS MOTION PROJECT\PROJETO\AR\Projeto_3D\Projeto_02\Assets\TouchInput_1.cs | 36 | Active |
功能需求
实现通过触屏控制与Image Target关联的3D物体的音频播放和暂停功能。
解决方案
1. 修复代码未闭合问题
现有脚本存在多处代码块未闭合,补全所有缺失的}并补充暂停音频的逻辑:
// 补全else块内的if逻辑和所有闭合括号 if (isPlaying) { audioSource.Pause(); // 可选:如果需要在丢失目标时重置播放状态,取消注释下面一行 // isPlaying = false; } } // 闭合if(isPlaying)块 } // 闭合else块 } // 闭合OnTrackableStateChanged方法 } // 闭合整个类
2. 解决Vuforia引用问题
- 确认Unity项目已正确导入Vuforia AR包:打开
Window > Package Manager,搜索Vuforia并安装/更新到稳定版本。 - 确保脚本挂载在Vuforia Image Target对象上,而非普通GameObject,这样
GetComponent<TrackableBehaviour>()才能获取到对应组件。 - 若使用Vuforia 10+版本,部分API有调整,可尝试替换命名空间引用(仅适用于集成AR Foundation的场景):
// 替换原using Vuforia;为: using UnityEngine.XR.ARFoundation; using UnityEngine.XR.ARSubsystems; // 同时将TrackableBehaviour替换为ARTrackable,ITrackableEventHandler替换为ITrackableChangedHandler
3. 添加触屏控制逻辑
在脚本中添加Update方法,处理触摸输入实现播放/暂停切换:
void Update() { if (Input.touchCount <= 0) return; Touch touch = Input.GetTouch(0); if (touch.phase != TouchPhase.Began) return; Ray ray = Camera.main.ScreenPointToRay(touch.position); if (Physics.Raycast(ray, out RaycastHit hit) && hit.collider.gameObject == temploMaiaObject) { if (isPlaying) { audioSource.Pause(); isPlaying = false; } else { audioSource.Play(); isPlaying = true; } } }
完整修复后的脚本
using UnityEngine; using Vuforia; public class TouchInput_1 : MonoBehaviour, ITrackableEventHandler { private TrackableBehaviour mTrackableBehaviour; public GameObject temploMaiaObject; private AudioSource audioSource; private bool isPlaying = false; void Start() { audioSource = temploMaiaObject.GetComponent<AudioSource>(); mTrackableBehaviour = GetComponent<TrackableBehaviour>(); if (mTrackableBehaviour != null) { mTrackableBehaviour.RegisterTrackableEventHandler(this); } } void OnDestroy() { if (mTrackableBehaviour != null) { mTrackableBehaviour.UnregisterTrackableEventHandler(this); } } public void OnTrackableStateChanged(TrackableBehaviour.Status previousStatus, TrackableBehaviour.Status newStatus) { if (newStatus == TrackableBehaviour.Status.DETECTED || newStatus == TrackableBehaviour.Status.TRACKED || newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED) { Debug.Log("Target is detected!"); enabled = true; } else { Debug.Log("Target is lost!"); enabled = false; if (isPlaying) { audioSource.Pause(); // isPlaying = false; // 可选:丢失目标时重置播放状态 } } } void Update() { if (Input.touchCount <= 0) return; Touch touch = Input.GetTouch(0); if (touch.phase != TouchPhase.Began) return; Ray ray = Camera.main.ScreenPointToRay(touch.position); if (Physics.Raycast(ray, out RaycastHit hit) && hit.collider.gameObject == temploMaiaObject) { if (isPlaying) { audioSource.Pause(); isPlaying = false; } else { audioSource.Play(); isPlaying = true; } } } }
内容的提问来源于stack exchange,提问作者Thales Willian Nogueira da Sil
相关产品推荐
相关产品推荐

