【发布时间】:2016-09-15 13:32:57
【问题描述】:
快速免责声明:我不是一个非常高级的 C# 用户,更习惯于像 python 这样的语言,所以如果答案就在我面前,我深表歉意。
我一直在为 Google Cardboard 制作一个小游戏,以演示场景为基础。我有一些代码可以检查“触发拉动”,然后应该将 Cardboard 相机向上平移 10 个单位。
//Checks For Magnet Trigger
if (Cardboard.SDK.Triggered)
{
//moves player up at a rate of 10u/s
transform.Translate(Vector3.up * 10);
Debug.Log("Triggered_Head");
//Tell Cardboard to maintain new position
}
目前,这对于检测磁铁拉力非常有效,并且确实可以平移纸板。问题是,几乎在平移后纸板立即被传送回基本位置。
目前我已将此代码从 CardboardHead.cs 插入到 UpdateHead() 方法 (?) 中,如下所示:
// Compute new head pose.
private void UpdateHead() {
if (updated) { // Only one update per frame, please.
return;
}
updated = true;
Cardboard.SDK.UpdateState();
if (trackRotation) {
var rot = Cardboard.SDK.HeadPose.Orientation;
if (target == null) {
transform.localRotation = rot;
} else {
transform.rotation = target.rotation * rot;
}
}
if (trackPosition) {
Vector3 pos = Cardboard.SDK.HeadPose.Position;
if (target == null) {
transform.localPosition = pos;
}
else {
transform.position = target.position + target.rotation * pos;
}
//Checks For Magnet Trigger
if (Cardboard.SDK.Triggered)
{
//moves player up at a rate of 10u/s
transform.Translate(Vector3.up * 10);
Debug.Log("Triggered_Head");
//Tell Cardboard to maintain new position
}
}
if (OnHeadUpdated != null) {
OnHeadUpdated(gameObject);
}
}
这样做一切正常,但位置几乎立即恢复(我假设在下一帧中)。所以我的问题是:我如何制作变形棒,有没有更好的方法来处理这个问题?
【问题讨论】:
-
嘿,尝试查看 Cardboard SDK 文档,但 Google 似乎做了很多更改,并且您使用的版本不再记录在他们的网站上。因此,一些一般性建议: 1# 将调试点放在更新位置的行上; 2# 检查该行代码的值。一旦你看到哪些值出错了,你就会知道罪魁祸首在哪里。可能是 Cardboard SDK 重置了位置,因为您使用了“一次性旋转”向量,当头部停止移动时该向量变为 0。
-
问题出在您检查 Cardboard.SDK.Triggered 之前。你在那里设置位置(实际上是多次)。首先进行所有的计算和检查,最后只设置一次实际位置(如果需要)
-
@Kamen 我上周才下载了 SDK,所以如果我得到一个旧版本会很奇怪。也许我会再次下载并检查。 PS:你能链接我SDK文档吗?我似乎找不到它们。
标签: c# transform unity5 google-cardboard