1. 程式人生 > >Unity3D中繼承在ios上的UIApplicationDelegate

Unity3D中繼承在ios上的UIApplicationDelegate

有時我們需要修改Unity為我們生成的在ios上的程式碼,通常可能要修改主要的是UnityAppController這個類,他是ios的UIApplicationDelegate。我們能想到的方法就是能夠繼承這個類,這在unity裡是支援的,做法是這樣的:

        編寫你自己的型別CustomAppController,繼承自UnityAppController,然後把你的CustomAppController.mm放在plugins/IOS/下面,這個下面所有的程式碼會在打包時放入xcode工程的Libraries下面,但是進入Unity裡面,程式沒使用我的controller而不是預設的那個,在main.mm中定義了一個常量AppControllerClassName,它表示unity將使用的那個型別的名字,要修改這裡。

        不過這裡有個自動修改的方式,只要在你的CustomAppController.mm的最前面加入

IMPL_APP_CONTROLLER_SUBCLASS(CustomAppController)就行了。

這個巨集的定義是這樣的

#define IMPL_APP_CONTROLLER_SUBCLASS(ClassName) \
@interface ClassName(OverrideAppDelegate)       \
{                                               \
}                                               \
+(void)load;                                    \
@end                                            \
@implementation ClassName(OverrideAppDelegate)  \
+(void)load                                     \
{                                               \
    extern const char* AppControllerClassName;  \
    AppControllerClassName = #ClassName;        \
}                                               \
@end

這裡的程式碼使用了object-c的一些特性,其中擴充套件load這個函式的意思就是,在這個類被載入到記憶體時執行這個事情,它會自動把main裡面的

AppControllerClassName改成你的


---------------------
作者:leonwei
來源:CSDN
原文:https://blog.csdn.net/leonwei/article/details/51098648
版權宣告:本文為博主原創文章,轉載請附上博文連結!