【问题标题】:How Embed Unity Project in ViewController Xcode (objective c/swift)如何在 ViewController Xcode 中嵌入 Unity 项目(objective c/swift)
【发布时间】:2017-11-03 17:47:06
【问题描述】:

如何在 xcode 9.0 中将我的统一项目 (2017.2.0f3) 插入到我的视图控制器中?

this guide,实际上已经过时了,我得到了以下错误:

clang: error: unknown argument: '-weak-LSystem'

在 Build Phases - Compile Sources 中,我只有 3 个文件(ViewControllermainAppDelegate),但在教程 90 多个编译源中

【问题讨论】:

  • 创建一个自定义 .xconfig 文件,其中包含来自统一项目的所有标志和参数。将统一数据文件夹添加到您的项目中作为参考。将统一库文件添加到您的项目中。更改应用程序代表以将所有呼叫转发给统一并启动统一然后停止统一。最后将 UnityView 复制到您的控制器,瞧。我在我的公司这样做,而且效果很好。
  • @Brandon 也许你能有一个指导链接吗?:)

标签: ios unity3d unity5


【解决方案1】:

我在这里添加了一个指南视频:https://www.youtube.com/watch?v=2PW7_CfIwY0

我上传了一个 4K 10GB 的视频文件。希望 youtube 在您看到此答案时完成处理。

应该很容易理解(我希望..我不擅长视频)..但需要一些时间。如果您不是为模拟器构建,请删除:-DTARGET_IPHONE_SIMULATOR=1.. 相应地修改其他标志。

我在视频中使用的Debug.xcconfig如下:

UNITY_RUNTIME_VERSION = 2017.2.0f3;
UNITY_SCRIPTING_BACKEND = il2cpp;
UNITY_IOS_EXPORT_PATH = ../Unity;
GCC_PREFIX_HEADER = $(UNITY_IOS_EXPORT_PATH)/Classes/Prefix.pch;

OTHER_LDFLAGS = -weak-lSystem -weak_framework CoreMotion -weak_framework GameKit -weak_framework iAd -framework CoreGraphics -framework AVFoundation -framework CoreVideo -framework CoreMedia -framework CoreText -framework SystemConfiguration -framework CoreLocation -framework MediaPlayer -framework MediaToolbox -framework CFNetwork -framework AudioToolbox -framework OpenAL -framework Metal -framework QuartzCore -framework Metal -framework OpenGLES -framework UIKit -framework Foundation -liconv.2 -liPhone-lib;

HEADER_SEARCH_PATHS = "$(UNITY_IOS_EXPORT_PATH)/Classes" "$(UNITY_IOS_EXPORT_PATH)/Classes/Native" "$(UNITY_IOS_EXPORT_PATH)/Libraries/bdwgc/include" "$(UNITY_IOS_EXPORT_PATH)/Libraries/libil2cpp/include";
LIBRARY_SEARCH_PATHS = "$(UNITY_IOS_EXPORT_PATH)" "$(UNITY_IOS_EXPORT_PATH)/Libraries" "$(UNITY_IOS_EXPORT_PATH)/Libraries/libil2cpp/include";

ENABLE_BITCODE = YES;

OTHER_CFLAGS = -DINIT_SCRIPTING_BACKEND=1 -DTARGET_IPHONE_SIMULATOR=1 -DRUNTIME_IL2CPP=1 -fno-strict-overflow;
LD_GENERATE_MAP_FILE = YES;
CLANG_CXX_LANGUAGE_STANDARD = c++11;
CLANG_CXX_LIBRARY = libc++;
CLANG_ENABLE_MODULES = NO;
CLANG_WARN_BOOL_CONVERSION = NO;
CLANG_WARN_CONSTANT_CONVERSION = NO;
CLANG_WARN_INT_CONVERSION = NO;
CLANG_WARN_OBJC_ROOT_CLASS = YES;
CLANG_WARN_UNREACHABLE_CODE = NO;
CLANG_WARN__DUPLICATE_METHOD_MATCH = NO;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES;
CLANG_WARN_EMPTY_BODY = NO;
CLANG_WARN_ENUM_CONVERSION = NO;
GCC_C_LANGUAGE_STANDARD = c99;
GCC_ENABLE_OBJC_EXCEPTIONS = NO;
GCC_ENABLE_CPP_RTTI = NO;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_THUMB_SUPPORT = NO;
GCC_USE_INDIRECT_FUNCTION_CALLS = NO;
GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
GCC_WARN_64_TO_32_BIT_CONVERSION[arch=*64] = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNDECLARED_SELECTOR = NO;
GCC_WARN_UNINITIALIZED_AUTOS = NO;
GCC_WARN_UNUSED_FUNCTION = NO;

视频中Launcher.mm 的代码是(因此您不必全部输入):

@interface Launcher()
@property (nonatomic, assign) bool isRunning;
@end

@implementation Launcher

+ (int)initializeUnity:(int)argc argv:(char**)argv appDelegateName:(NSString *)appDelegateName {
    return UNITY_INIT(argc, argv, appDelegateName.UTF8String);
}

+ (UnityAppController *)controller {
    static UnityAppController *instance = nil;

    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        instance = [[UnityAppController alloc] init];
    });

    return instance;
}

- (void)start {
    if (!self.isRunning) {
        self.isRunning = true;
        [self applicationDidBecomeActive:UIApplication.sharedApplication];
    }
}

- (void)stop {
    if (self.isRunning) {
        [self applicationWillResignActive:UIApplication.sharedApplication];
        self.isRunning = false;
    }
}

- (UIView *)view {
    return UnityGetGLView();
}


- (NSUInteger)application:(UIApplication*)application supportedInterfaceOrientationsForWindow:(UIWindow*)window
{
    return [[Launcher controller] application:application supportedInterfaceOrientationsForWindow:window];
}

- (void)application:(UIApplication*)application didReceiveLocalNotification:(UILocalNotification*)notification
{
    [[Launcher controller] application:application didReceiveLocalNotification:notification];
}


- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo
{
    #if UNITY_USES_REMOTE_NOTIFICATIONS
    [[Launcher controller] application:application didReceiveRemoteNotification:userInfo];
    #endif
}

- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
    #if UNITY_USES_REMOTE_NOTIFICATIONS
    [[Launcher controller] application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
    #endif
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler
{
    #if UNITY_USES_REMOTE_NOTIFICATIONS
    [[[Launcher controller] application:application didReceiveRemoteNotification:userInfo] fetchCompletionHandler:handler];
    #endif
}

- (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
{
    #if UNITY_USES_REMOTE_NOTIFICATIONS
    [[Launcher controller] application:application didFailToRegisterForRemoteNotificationsWithError:error];
    #endif
}

- (BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation
{
    return [[Launcher controller] application:application openURL:url sourceApplication:sourceApplication annotation:annotation];
}

- (BOOL)application:(UIApplication*)application willFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
    [[Launcher controller] application:application willFinishLaunchingWithOptions:launchOptions];
    return YES;
}

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
    [[Launcher controller] application:application didFinishLaunchingWithOptions:launchOptions];

    return YES;
}

- (void)applicationDidEnterBackground:(UIApplication*)application
{
    if (self.isRunning) {
        [[Launcher controller] applicationDidEnterBackground:application];
    }
}

- (void)applicationWillEnterForeground:(UIApplication*)application
{
    if (self.isRunning) {
        [[Launcher controller] applicationWillEnterForeground:application];
    }
}

- (void)applicationDidBecomeActive:(UIApplication*)application
{
    if (self.isRunning) {
        [[Launcher controller] applicationDidBecomeActive:application];
    }
}

- (void)applicationWillResignActive:(UIApplication*)application
{
    if (self.isRunning) {
        [[Launcher controller] applicationWillResignActive:application];
    }
}

- (void)applicationDidReceiveMemoryWarning:(UIApplication*)application
{
    [[Launcher controller] applicationDidReceiveMemoryWarning:application];
}

- (void)applicationWillTerminate:(UIApplication*)application
{
    [[Launcher controller] applicationWillTerminate:application];
}
@end

【讨论】:

  • 嗨!非常感谢您提供本指南:) 但是我在第一次构建后遇到了 15 个错误(视频中的 10:32)i.imgur.com/jF5ex6E.png
  • ******************* 最佳答案之一。 *****************
  • @Brandon:请告诉我,如何添加到 swift 项目中。
【解决方案2】:

这里是将 Unity View Controller (Unity 2017.2.0f3) 集成到 Xcode 9(和 9.1)Swift 项目中的最新指南。如果您使用的是 Obj-C,它具有相似的概念。它还有一个演示项目,您可以在将其应用到自己的项目之前先看看一切是如何工作的。

https://github.com/jiulongw/swift-unity

【讨论】:

  • 如何与从unity导出的ARKIT应用程序一起使用?
猜你喜欢
  • 2023-04-10
  • 2020-11-30
  • 1970-01-01
  • 2012-02-12
  • 2016-11-20
  • 2012-09-13
  • 2018-07-04
  • 2015-10-27
  • 1970-01-01
相关资源
最近更新 更多