c# - 为 Vuforia+Unity 检测到图像时启动 C# 脚本
问题描述
我写了一个脚本,比如在 C# 中将一个球体螺旋到中心。但是,脚本甚至在检测到图像目标之前就开始了,当我将图像目标放在相机前面时,脚本已经执行。
我读到需要为此修改 DefaultTrackableBehaviour 脚本。我看到了一些视频,这些视频展示了如何在检测到图像目标时启动音频,但是如何在检测到图像目标时启动脚本。
这是我只想在检测到图像目标时为球体执行的脚本。执行时,球体将螺旋到中心 (0,0,0)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class spiralanti : MonoBehaviour
{
float angles;
float radiuss;
float angleSpeed;
float rSpeed;
// Start is called before the first frame update
void Start()
{
angles = 0;
radiuss = 1f;
angleSpeed = 250f;
rSpeed = 0.05f;
angles = Mathf.Max(0, Mathf.PI);
radiuss = Mathf.Max(0, radiuss);
//float x = 0;
// float y = 0;
// float z = 0;
}
// Update is called once per frame
void Update()
{
angles += Time.deltaTime * angleSpeed;
radiuss -= Time.deltaTime * rSpeed;
if (radiuss <= 0)
{
float x = 0;
float y = 1;
float z = 0;
transform.localPosition = new Vector3(x, y, z);
}
else
{
float x = radiuss * Mathf.Cos(Mathf.Deg2Rad * angles);
float z = radiuss * Mathf.Sin(Mathf.Deg2Rad * angles);
float y = 1;
transform.localPosition = new Vector3(x, y, z);
}
}
}
请帮忙。
解决方案
- 在 DefaultTrackableBehaviour 脚本中,创建一个布尔变量 targetFound。
- 从脚本的 Start() 方法复制所有内容并添加到 DefaultTrackableBehaviour 脚本的 start() 方法。
- 将脚本中的 Update() 方法复制并添加到 DefaultTrackableBehaviour 脚本
- 在 Update() 方法中添加一个 if 条件来检查 targetFound 是 true 还是 false,如果 targetFound 是 true,则执行 Update() 代码。
- 在 onTrackingFound() 方法中将 targetFound 值设置为 true。
public bool targetFound = false;
void onTrackingFound() {
targetFound = true;
}
void Update() {
if (targetFound){
// your code here
}
}
推荐阅读
- sql - 无法更改 SQL Server Management Studio 安装路径
- wordpress - 为什么 pdf 在 wordpress 中打不开?
- api - 为什么 api 提供者推荐 POST 与 Get 来抓取数据?
- django - 将 Django 应用程序部署到 Heroku 后如何让用户回来
- python - 特定共享驱动器 ID 集的高级 GAM 文件计数。如何使用文件计数?
- html - SVG - HTML 中的 Angular Gradient 问题
- swift - Swift 5.5 中使用 async/await 的循环函数
- python - 如何注释返回类型取决于其参数的函数?
- c - OpenCL 非发散 if() 后跟 printf() 导致严重减速和内核代码干扰最大工作组大小
- jestjs - 如何用玩笑从一个苗条的组件中测试一个功能?