我正试图用制作一个球形360视频。
我已经用MovieTexture对一个工作良好的桌面构建进行了一些测试,但是在iOS中没有这个类的实现。
我在资产存储上见过一些外部插件,但它们似乎都与Unity5兼容。
是否有一个由Cardboard SDK提供的类来实现这一点,或者如果没有,您是否知道另一个解决方案或插件可以实现这一点?
发布于 2015-07-12 20:05:23
我终于解决了。
我们必须删除CardboardAppController和MMTAppController,并将它们合并为一个。
基本上,在资产/Plugin/ios中有两个AppControllers:"CardboardAppController.mm“(也有一个CardboardAppController.h头)和"MMTAppController.mm”
诀窍是ios只能在一代又一代地“看到”一个应用程序控制器。因为CardboardAppController是第一位的,所以MMTAppController就被丢弃了。
为了解决这个问题,我做了以下工作:
创建新的AppController:在我的例子中,它名为SVAppController.mm和SVAppController.h
然后,我们必须将两个应用程序控制器合并到其中,并删除它们。
因此,我将CardboardAppController.h的内容粘贴到SVAppController.h中,将CardboardAppController.mm的内容粘贴到SVAppController.mm中(确保用SVAppController替换CardboardAppController代码中的名称)。
然后将MMTAppController.mm的内容复制到SVAppController.mm 中,在正确的位置
最后删除CardboardAppController和MMTAppController。
您将留下一个应用程序控制器,一切都应该是好的。
作为参考,这里是我的最后一个SVAppController:
SVAppController.h
#import "UnityAppController.h"
#import "UnityAppController+Rendering.h"
#import "UnityAppController+ViewHandling.h"
// Unity 4.6.2 added a category to the app controller.
#if UNITY_VERSION < 462
#import "UnityInterface.h"
#else
#import "UnityAppController+UnityInterface.h"
#endif
// Unity 4 used a different method name to create the UnityView.
#if UNITY_VERSION < 500
#define createUnityView initUnityViewImpl
#endif
@interface SVAppController : UnityAppController
- (void)preStartUnity;
- (UnityView *)createUnityView;
- (void)startSettingsDialog:(UIViewController *)dialog;
- (void)stopSettingsDialog;
- (void)pause:(bool)paused;
- (void)shouldAttachRenderDelegate;
@endSVAppController.mm
#import "SVAppController.h"
#import "CardboardView.h"
#import <UIKit/UIKit.h>
extern "C" {
extern void readProfile();
extern void syncProfile();
extern "C" void MMTUnitySetGraphicsDevice(void* device, int deviceType, int eventType);
extern "C" void MMTUnityRenderEvent(int marker);
extern UIViewController* createSettingsDialog(id app);
extern UIViewController* createOnboardingDialog(id app);
bool isOpenGLAPI() {
#if UNITY_VERSION < 463
return true;
#else
SVAppController* app = (SVAppController *)GetAppController();
UnityRenderingAPI api = [app renderingAPI];
return api == apiOpenGLES2 || api == apiOpenGLES3;
#endif
}
void launchSettingsDialog() {
SVAppController* app = (SVAppController *)GetAppController();
[app startSettingsDialog:createSettingsDialog(app)];
}
void launchOnboardingDialog() {
SVAppController* app = (SVAppController *)GetAppController();
[app startSettingsDialog:createOnboardingDialog(app)];
}
void endSettingsDialog() {
SVAppController* app = (SVAppController *)GetAppController();
[app stopSettingsDialog];
}
} // extern "C"
@implementation SVAppController
- (void)preStartUnity {
[super preStartUnity];
syncProfile();
}
- (UnityView *)createUnityView {
return [[CardboardView alloc] initFromMainScreen];
}
- (void)startSettingsDialog:(UIViewController*)dialog {
[self pause:YES];
[self.rootViewController presentViewController:dialog animated:NO completion:nil];
}
- (void)stopSettingsDialog {
[[self rootViewController] dismissViewControllerAnimated:NO completion:nil];
[self pause:NO];
}
- (void)pause:(bool)paused {
#if UNITY_VERSION < 462
UnityPause(paused);
#else
self.paused = paused;
#endif
}
- (void)shouldAttachRenderDelegate;
{
UnityRegisterRenderingPlugin(&MMTUnitySetGraphicsDevice, &MMTUnityRenderEvent);
}
@end
IMPL_APP_CONTROLLER_SUBCLASS(SVAppController)发布于 2015-08-31 23:59:15
“统一”中的电影通常被渲染成物体上的纹理。在移动设备上,问题是设备只想在视频播放器中显示视频,因此不支持Unity。
我成功地绕过了这一点,并成功地在球体内部绘制360视频,使用来自Unity的统一插件,名为“轻松电影纹理”( Easy纹理)。
对于在Mac上工作,我所做的是:
很确定这就是一切。希望它能帮助那些困在这个问题上的人。
最后注意,视频将只呈现在设备上。在编辑器中,您将只看到球体上的白色纹理。你必须发布到设备上,才能看到你令人敬畏的360视频。
https://stackoverflow.com/questions/30589676
复制相似问题