首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS上的视频纹理与Unity5

iOS上的视频纹理与Unity5
EN

Stack Overflow用户
提问于 2015-06-02 07:13:57
回答 2查看 4.8K关注 0票数 3

我正试图用制作一个球形360视频。

我已经用MovieTexture对一个工作良好的桌面构建进行了一些测试,但是在iOS中没有这个类的实现。

我在资产存储上见过一些外部插件,但它们似乎都与Unity5兼容。

是否有一个由Cardboard SDK提供的类来实现这一点,或者如果没有,您是否知道另一个解决方案或插件可以实现这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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

代码语言:javascript
复制
#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;

@end

SVAppController.mm

代码语言:javascript
复制
#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)
票数 1
EN

Stack Overflow用户

发布于 2015-08-31 23:59:15

“统一”中的电影通常被渲染成物体上的纹理。在移动设备上,问题是设备只想在视频播放器中显示视频,因此不支持Unity。

我成功地绕过了这一点,并成功地在球体内部绘制360视频,使用来自Unity的统一插件,名为“轻松电影纹理”( Easy纹理)。

对于在Mac上工作,我所做的是:

  1. 从下载Easy纹理插件
  2. 从资产/EasyMovie织物/场景打开演示球演示场景
  3. 创建一个新的(空) Prefab到您的项目,并将Sphere GameObject从Demo场景拖到Prefab上。
  4. 重新打开您的卡板场景,并将新的视频圈预置拖到您的层次结构中。
  5. 在Quicktime中打开源代码360-视频
  6. ->导出-> 720 p文件
  7. 将文件扩展名从“.mov”更改为“.mp4”
  8. 将新的mp4文件拖到项目资产/流资产目录中。注意:不要通过菜单系统导入,因为这将迫使统一转换为OGG。
  9. 在视频圈GameObject的"Media“脚本组件上,找到"Str_File_Name”字段,并提供新导出的视频文件的完整文件名。确保将扩展作为字符串"mymovie.mp4“的一部分。

很确定这就是一切。希望它能帮助那些困在这个问题上的人。

最后注意,视频将只呈现在设备上。在编辑器中,您将只看到球体上的白色纹理。你必须发布到设备上,才能看到你令人敬畏的360视频。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30589676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档