

asset_tools.import_asset_tasks([import_task])运行就死了
https://zhuanlan.zhihu.com/p/639729563
IsInGameThread()好像是这个问题
Assertion failed: IsInGameThread() [File:D:/Build/++UE4/Sync/Engine/Source/Runtime/CoreUObject/Private/UObject/UObjectGlobals.cpp] [Line: 1092] Unable to load /Game/Characters/_Shared/Materials/Master/M_CharaMaster_Cloth. Objects and Packages can only be loaded from the game thread.
UE4Editor_Core
UE4Editor_Core
UE4Editor_CoreUObject
UE4Editor_CoreUObject
UE4Editor_CoreUObject
UE4Editor_CoreUObject
UE4Editor_CoreUObject
UE4Editor_CoreUObject
UE4Editor_CoreUObject
UE4Editor_UnrealEd
UE4Editor_UnrealEd
UE4Editor_UnrealEd
UE4Editor_UnrealEd
UE4Editor_AssetTools
UE4Editor_AssetTools
UE4Editor_AssetTools
UE4Editor_CoreUObject
UE4Editor_CoreUObject
UE4Editor_PythonScriptPlugin
UE4Editor_PythonScriptPlugin
UE4Editor_PythonScriptPlugin
UE4Editor_PythonScriptPlugin
UE4Editor_PythonScriptPlugin
python37!_PyObject_FastCallKeywords() [c:\a\18\s\objects\call.c:199]
python37!call_function() [c:\a\18\s\python\ceval.c:4619]
python37!_PyEval_EvalFrameDefault() [c:\a\18\s\python\ceval.c:3095]
python37!_PyEval_EvalCodeWithName() [c:\a\18\s\python\ceval.c:3930]
python37!PyEval_EvalCodeEx() [c:\a\18\s\python\ceval.c:3966]
python37!PyEval_EvalCode() [c:\a\18\s\python\ceval.c:530]
python37!run_mod() [c:\a\18\s\python\pythonrun.c:1036]
python37!PyRun_StringFlags() [c:\a\18\s\python\pythonrun.c:959]
python37!builtin_exec_impl() [c:\a\18\s\python\bltinmodule.c:1096]
python37!builtin_exec() [c:\a\18\s\python\clinic\bltinmodule.c.h:283]
python37!_PyMethodDef_RawFastCallKeywords() [c:\a\18\s\objects\call.c:655]
python37!call_function() [c:\a\18\s\python\ceval.c:4568]
python37!_PyEval_EvalFrameDefault() [c:\a\18\s\python\ceval.c:3126]
python37!call_function() [c:\a\18\s\python\ceval.c:4616]
python37!_PyEval_EvalFrameDefault() [c:\a\18\s\python\ceval.c:3111]
python37!_PyFunction_FastCallDict() [c:\a\18\s\objects\call.c:322]
python37!method_call() [c:\a\18\s\objects\classobject.c:309]
python37!_PyEval_EvalFrameDefault() [c:\a\18\s\python\ceval.c:3191]
python37!call_function() [c:\a\18\s\python\ceval.c:4616]
python37!_PyEval_EvalFrameDefault() [c:\a\18\s\python\ceval.c:3111]
python37!call_function() [c:\a\18\s\python\ceval.c:4616]
python37!_PyEval_EvalFrameDefault() [c:\a\18\s\python\ceval.c:3111]
python37!_PyFunction_FastCallDict() [c:\a\18\s\objects\call.c:322]
python37!method_call() [c:\a\18\s\objects\classobject.c:309]
python37!PyObject_Call() [c:\a\18\s\objects\call.c:247]
python37!t_bootstrap() [c:\a\18\s\modules\_threadmodule.c:994]
python37!bootstrap() [c:\a\18\s\python\thread_nt.h:174]
ucrtbase
kernel32
ntdll
```python
import unreal
import socket
import threading
import json
import queue
import time
class PythonExecServer:
def __init__(self, port=8070):
self.port = port
self.server_socket = None
self.running = False
self.command_queue = queue.Queue()
self.result_queue = queue.Queue()
def start_server(self):
"""启动服务器监听8070端口"""
try:
self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.server_socket.bind(('localhost', self.port))
self.server_socket.listen(5)
self.running = True
print(f"Python exec server started on port {self.port}")
while self.running:
try:
client_socket, address = self.server_socket.accept()
print(f"Connection from {address}")
# 在新线程中处理客户端请求
client_thread = threading.Thread(
target=self.handle_client,
args=(client_socket,)
)
client_thread.daemon = True
client_thread.start()
except socket.error:
if self.running:
continue
break
except Exception as e:
print(f"Error starting server: {e}")
def handle_client(self, client_socket):
"""处理客户端请求"""
try:
data = client_socket.recv(4096).decode('utf-8')
if data:
# 解析JSON命令
command_data = json.loads(data)
command = command_data.get('command', '')
# 直接执行命令(注意:这可能需要在UE主线程中执行)
result = self.execute_command(command)
# 发送响应
response = json.dumps({'result': result})
client_socket.send(response.encode('utf-8'))
except Exception as e:
error_response = json.dumps({'error': str(e)})
client_socket.send(error_response.encode('utf-8'))
finally:
client_socket.close()
def execute_command(self, command):
"""执行Unreal命令"""
try:
# 使用exec执行命令
exec_globals = {'unreal': unreal}
exec(command, exec_globals)
return "Command executed successfully"
except Exception as e:
return f"Error executing command: {str(e)}"
def stop_server(self):
"""停止服务器"""
self.running = False
if self.server_socket:
self.server_socket.close()
# 全局服务器实例
server = PythonExecServer(port=8070)
def start_exec_server():
"""启动exec服务器的函数"""
global server
server_thread = threading.Thread(target=server.start_server)
server_thread.daemon = True
server_thread.start()
return "Server started on port 8070"
def stop_exec_server():
"""停止exec服务器的函数"""
global server
server.stop_server()
return "Server stopped"
if __name__ == "__main__":
start_exec_server()
print("啊卡夏")
```