快速免责声明:我不是一个非常高级的C#用户,更习惯于像python这样的语言,所以如果答案就在我面前,我道歉。
我一直在为Google Cardboard做一个小游戏,以演示场景为基础。我有一些代码可以检查“Trigger Pull”,然后将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);
}
}
这样做可以做到一切正确,但几乎立即恢复位置(在我假设的下一帧中)。所以我的问题是:我如何制作变换棒,是否有更好的方法来处理这个问题?
答案 0 :(得分:2)
好吧,我想出了如何处理动作,我在这里发布解决方案给将来无法解决问题的人。快速说明:我确实更新了最新版本的SDK,但除了命名之外,它不应该有所作为。
所以,第1步:
创建一个用作控制器的对象。我只是使用了资产包中的一个原型立方体,但无论什么都可行(空对象最好)。
将此物体或多或少地放置在两个相机的中心点。
将您的GvrMain对象父控制到控制器对象(通过将其拖动到控制器对象上)以及您想要随播放器移动的任何其他组件(枪支,GUI等)
第2步:
为控制器对象创建脚本。
在Update()方法中,添加以下行:
if (GvrViewer.Instance.Triggered)
{
transform.Translate(Vector3.up)
}
旧版本将GvrViewer.Instance
替换为Cardboard.SDK
根据自己的喜好自定义您的动作,任何正常的统一功能都应该有效。
一些缺点:
你必须反复按下触发器,使用while()似乎打破统一。这似乎很容易修复
代码段立即翻译为1.不确定如何将其作为稳定的加速度。
希望这可以帮助任何有问题的人。