【发布时间】:2017-11-20 03:23:04
【问题描述】:
您从 CMAttitude 获得的四元数似乎有缺陷。在 Unity 中,我可以获取 iPhone 的旋转,将其应用于 3d 对象,并且当您旋转 iPhone 时,该对象将旋转。在 Xcode 中似乎有所不同。
要设置快速测试项目,请按以下步骤操作:
在 Xcode 中,从 iOS > 游戏模板 创建一个新项目(这为我们提供了一个 3d 对象进行测试)。
在
GameViewController.h中添加#import <CoreMotion/CoreMotion.h>和@property (strong, nonatomic) CMMotionManager *motionManager;在
GameViewController.m中删除第 46 行[ship runAction: etc..处的动画,并且不允许第 55 行的相机控制(非必要)-
在
GameViewController.m中添加到 ViewDidLoad 的底部self.motionManager = [[CMMotionManager alloc] init]; self.motionManager.deviceMotionUpdateInterval = .1; [self.motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^(CMDeviceMotion *motion, NSError *error) { CMQuaternion q = motion.attitude.quaternion; ship.rotation = SCNVector4Make(q.x, q.y, q.z, q.w); if(error){ NSLog(@"%@", error); } } ]; 为避免麻烦,在项目 > 目标 > 项目名称 > 部署信息 > 设备方向中,仅允许纵向(或仅锁定 iPhone 的旋转)
当我将它构建到我的 iPhone 时,3d 对象(飞机)不会跟随手机的旋转。投球类作品。
这是故意的吗?我怎么用错了?
【问题讨论】:
-
使用
ship.orientation代替ship.rotation解决了这个问题。谢谢@orangenkopf
标签: ios objective-c scenekit core-motion