1.Godot源碼
本篇是記錄自己之前研究Godot版本3.x時(shí)的筆記(例如3.5.2),幾個(gè)重要的地址:
- Godot的源碼地址是:https://github.com/godotengine/godot
- Godot的官方網(wǎng)站哑梳,含有教程:https://www.godotengine.org/
- Godot的國內(nèi)網(wǎng)站机打,含有教程:http://godot.pro/
?? 在下載的時(shí)候妒貌,一定需要注意分支谐算,防止分支導(dǎo)致的各種報(bào)錯(cuò)
2.Godot3的源碼目錄
下載(git或者直接下載對(duì)應(yīng)Releases源碼)源碼目錄如下:
在platform/iphone
目錄中卓舵,就是iOS相關(guān)的核心代碼叫确,可以添加和修改對(duì)應(yīng)的類跳芳,進(jìn)而定制化一些功能,注意启妹,對(duì)于新增的類筛严,一定要在iphone
目錄中SCsub
文件進(jìn)行添加,例如:
比如我們利用OC的反射饶米,暫時(shí)對(duì)外暴露一個(gè)AppReflexDelegate
桨啃,在文件godot_app_delegate.m
中,將+load
方法修改如下:
+ (void)load {
services = [NSMutableArray new];
Class cls = NSClassFromString(@"AppReflexDelegate");
if (cls && [cls conformsToProtocol:@protocol(UIApplicationDelegate)]) {
[services addObject:[cls new]];
}
[services addObject:[AppDelegate new]];
}
3.Godot編譯iOS模板(庫)
3.1 編譯前的準(zhǔn)備
- Godot的源碼檬输,注意選擇正確的分支
- 電腦依賴Python3.8以上的Python環(huán)境
- 安裝
Scons
照瘾,Scons
是一個(gè)開放源碼、以Python語言編碼的自動(dòng)化構(gòu)建工具丧慈。
這里使用Homebrew
進(jìn)行安裝:
$ brew install scons
# 如果中間報(bào)錯(cuò)析命,根據(jù)報(bào)錯(cuò)處理即可,我在安裝的時(shí)候逃默,提示了缺少 xcode-select 環(huán)境
# 然后根據(jù)提示鹃愤,安裝了 xcode-select 就好了
$ xcode-select --install
$ xcode-select --version # 查看版本,沒有安裝Xcode也可以裝 xcode-select
安裝Scons
之后完域,可以使用下面的命令查看安裝的目錄和狀態(tài):
$ brew info scons
scons: stable 4.3.0 (bottled)
Substitute for classic 'make' tool with autoconf/automake functionality
https://www.scons.org/
/usr/local/Cellar/scons/4.3.0 (2,274 files, 28.8MB) *
Poured from bottle on 2022-02-19 at 15:00:53
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/scons.rb
License: MIT
==> Dependencies
Required: python@3.10 ?
==> Analytics
install: 2,221 (30 days), 8,413 (90 days), 34,635 (365 days)
install-on-request: 1,481 (30 days), 6,130 (90 days), 26,127 (365 days)
build-error: 1 (30 days)
3.2 編譯Godot3源碼
進(jìn)入源碼的根目錄下软吐,輸入命令直接進(jìn)行編譯:
# 例如 tools=no 不帶編輯器;-j6是多核CPU編譯吟税,會(huì)快一些
scons p=iphone tools=no target=release_debug arch=arm64 -j6
# 可選的凹耙,編譯x86模擬器架構(gòu),支持模擬器運(yùn)行肠仪,注意加`ios_simulator=yes`肖抱,不然會(huì)失敗
scons p=iphone tools=no target=release_debug arch=x86_64 ios_simulator=yes -j6
# 打包之后,可以將多個(gè)架構(gòu)的.a文件合并成一個(gè)异旧,使用 lipo 命令
lipo -create arm64.a x86_64.a -output fat.a
# 警告??注意意述,CPU的數(shù)量,也可以這么寫: sysctl -n hw.logicalcpu
scons p=iphone --jobs=$(sysctl -n hw.logicalcpu)
參數(shù)說明:
p=iphone
指定編譯的目標(biāo)平臺(tái),要列出可用的目標(biāo)平臺(tái)荤崇,可以使用 scons platform=list
$ scons platform=list
scons: Reading SConscript files ...
The following platforms are available:
iphone
osx
server
tools=no
這里只是編譯iOS模板的.a
文件镐依,所以不包括編輯器和項(xiàng)目管理器。
target=release_debug
編譯模式天试,有三種模式:
-
debug
: 使用C ++調(diào)試符號(hào)進(jìn)行構(gòu)建, 運(yùn)行時(shí)檢查(執(zhí)行檢查并報(bào)告錯(cuò)誤), 并且?guī)缀鯖]有優(yōu)化,打出的.a包非常大. -
release_debug
: 不使用C ++調(diào)試符號(hào)和優(yōu)化進(jìn)行構(gòu)建, 但保留運(yùn)行時(shí)檢查(執(zhí)行檢查并報(bào)告錯(cuò)誤). 官方編輯器二進(jìn)制文件使用此配置. -
release
: 不使用符號(hào)進(jìn)行構(gòu)建, 具有優(yōu)化功能, 幾乎沒有運(yùn)行時(shí)檢查. 該構(gòu)建目標(biāo)不能與tools=yes
一起使用, 因?yàn)榫庉嬈餍枰恍┱{(diào)試功能和運(yùn)行時(shí)檢查才能運(yùn)行.
-j6
是編譯時(shí)CPU的核心數(shù)量然低,根據(jù)自己電腦的情況來指定喜每。
官方也有上面的詳細(xì)教程:https://docs.godotengine.org/en/stable/
不過官方的教程一般都是最新版本的
3.3 刪除編譯記錄
編譯之后,會(huì)在源碼目錄中雳攘,生成很多中間文件(比如.o
)带兜,如果想刪除這些文件,可以執(zhí)行下面的命令:
scons --clean <options>
- 其中 <options> 是您之前用來構(gòu)建Godot的構(gòu)建選項(xiàng)列表.
- 也可以直接全部刪除:
git clean -fixd
- 其實(shí)也可以查看其他命令:
scons --help
官方文檔關(guān)于Scons的教程:
https://docs.godotengine.org/en/stable/development/compiling/introduction_to_the_buildsystem.html#doc-introduction-to-the-buildsystem
4.生成iOS模板
打開Godot項(xiàng)目吨灭,在Editor
-->Export Template Manager
中刚照,下載官方的模板,下載之后喧兄,可以打開對(duì)應(yīng)的目錄:
先將此iphone.zip
備份一下无畔,然后再復(fù)制到某個(gè)地方解壓,加壓后的目錄如下:
此時(shí)吠冤,將我們編譯好的.a文件替換到對(duì)應(yīng)的架構(gòu)里面浑彰,注意文件名(編譯之后的.a文件名不一定是libgodot.a
,改成libgodot.a
即可)拯辙。
替換之后郭变,重新壓縮成iphone.zip
替換到原來的地方即可。