项目最近升级到了 creator 2.2.2 版本, 虽然支持了压缩纹理,但是没有缓存,每次打包都会浪费很多时间
所以就要想个办法把这问题解决了,此解决方案在 Mac OS 下测试开发,windows 参照此思路,应该也是可行的
目前只弄了 etc 格式的缓存,此贴目的只是在官方推出解决方案前提供一个思路
主要思路就是使用 python 脚本,代替引擎内部的 etcpack 工具,原始目录如下图
然后我们使用 Python 脚本替代 etcpack 文件,将原本的 etcpack 改个名字,比如 etcpacktool
修改后如下
打包后生成的缓存文件,根据原图 md5 命名
现在 etcpack 文件已经是我们替换后的 python 脚本, 脚本内容如下
#!/usr/bin/python3
# -*- coding: UTF-8 -*-
import sys
import os
import hashlib
import subprocess
cachePath = "/Volumes/WorkSpace/compressedTexturesCache/"
textureTypes = ["etc1","etc2"]
# 创建缓存目录
for textureType in textureTypes:
if not os.path.exists(cachePath + textureType):
os.makedirs(cachePath + textureType)
fromPath = sys.argv[1]
targetPath = sys.argv[2]
cacheDir = cachePath + sys.argv[4]
fileDir,fileName = os.path.split(fromPath)
md5 = hashlib.md5(open(fromPath, "rb").read()).hexdigest()
if not os.path.exists(cacheDir + "/" + md5 + ".pkm"):
print("开始压缩",fileName, md5)
# 缓存文件不存在, 压缩此图片
res = subprocess.call(["./etcpacktool", fromPath, cacheDir] + sys.argv[3:])
if res == 0:
# 压缩成功, 根据 MD5 重命名
os.rename(cacheDir + "/" + fileName.split(".")[0] + ".pkm", cacheDir + "/" + md5 + ".pkm")
else:
print("文件存在")
# 拷贝文件
status = subprocess.call("cp" + " " + cacheDir + "/" + md5 + ".pkm" + " " + targetPath + "/" + fileName.split(".")[0] + ".pkm", shell=True)
if status != 0:
if status < 0:
print("Killed by signal", status)
else:
print("Command failed with return code - ", status)
else:
print("拷贝成功")
#windows10 下的解决方案
先上代码,和前面的基本差不多, 主要多了一步,把 python 文件转成 exe
脚本稍微有点区别,不可混用
// 安装 pyinstaller
pip install pyinstaller
// 将 etcpack.py 转成 etcpaack.exe
pyinstaller -F etcpack.py
//会自动生成一个 dist 目录,里面生成了 etcpack.exe
//把原引擎目录下的 etcpack.exe 改名为 etcpacktool.exe ,把生成的 etcpack.exe 拷贝过去
#coding=utf-8
import sys
import os
import hashlib
import subprocess
cachePath = "C:\\Users\\alpha\\Desktop\\compressedTexturesCache\\"
textureTypes = ["etc1","etc2"]
# 创建缓存目录
for textureType in textureTypes:
if not os.path.exists(cachePath + textureType):
os.makedirs(cachePath + textureType)
fromPath = sys.argv[1]
targetPath = sys.argv[2]
cacheDir = cachePath + sys.argv[4]
fileDir,fileName = os.path.split(fromPath)
md5 = hashlib.md5(open(fromPath, "rb").read()).hexdigest()
if not os.path.exists(cacheDir + "\\" + md5 + ".pkm"):
print("开始压缩",fileName, md5)
# 缓存文件不存在, 压缩此图片
res = subprocess.call([".\\etcpacktool.exe", fromPath, cacheDir] + sys.argv[3:])
if res == 0:
# 压缩成功, 根据 MD5 重命名
os.rename(cacheDir + "\\" + fileName.split(".")[0] + ".pkm", cacheDir + "\\" + md5 + ".pkm")
else:
print("文件存在")
# 拷贝文件
status = subprocess.call("copy" + " " + cacheDir + "\\" + md5 + ".pkm" + " " + targetPath + "\\" + fileName.split(".")[0] + ".pkm", shell=True)
if status != 0:
if status < 0:
print("Killed by signal", status)
else:
print("Command failed with return code - ", status)
else:
print("拷贝成功")