先言:Ndisplay的启动运行,正常要先启动Switchboard Listener和Switchboard,同时要依次手动点击①连接和②启动按钮,这样才能启动应用,如图所示:
本教程的目的是避免手动去点击界面连接和启动,运行Switchboard.bat后自动连接Switchboard Listener并启动应用。
教程(以UE5.4为例):
1、打开UE引擎目录所在的SwitchBoard目录,修改3个文件
2、文本打开“config.py”文件,按ctrl+f
①搜索:all_settings = [setting for _, setting in self.basic_project_settings.items()] \
大概在2114行左右,新增两行代码
all_settings = [setting for _, setting in self.basic_project_settings.items()] \
+ [setting for _, setting in self.osc_settings.items()] \
+ [setting for _, setting in self.auto_launch_all_settings.items()] \ #本行新增
+ [setting for _, setting in self.delay_time_settings.items()] \ #本行新增
+ [setting for _, setting in self.source_control_settings.items()] \
+ [setting for _, setting in self.unreal_insight_settings.items()] \
+ [setting for _, setting in self.mu_settings.items()]
②搜索:self.OSC_SERVER_PORT = self.osc_settings["osc_server_port"]
大概在2338行左右,后面换行新增一段代码
self.OSC_SERVER_PORT = self.osc_settings["osc_server_port"]
#以下为新增
self.auto_launch_all_settings = {
"auto_launch_all": BoolSetting(
"auto_launch_all",
"Auto_Launch_All",
data.get('auto_launch_all', False),
tool_tip="enable auto launch all devices"
)
}
self.delay_time_settings = {
"delay_time_connect": IntSetting(
"delay_time_connect",
"Delay Time Connect (s)",
data.get('delay_time_connect', 10)
),
"delay_time_launch": IntSetting(
"delay_time_launch",
"Delay Time Launch After Connect (s)",
data.get('delay_time_launch', 10)
)
}
self.DELAY_TIME_CONNECT = self.delay_time_settings["delay_time_connect"]
self.DELAY_TIME_LAUNCH = self.delay_time_settings["delay_time_launch"]
③搜索:self.P4_ENGINE_PATH: PerforcePathSetting = self.source_control_settings["p4_engine_path"]
大概在2393行左右,后面新增一行代码:
self.P4_ENGINE_PATH: PerforcePathSetting = self.source_control_settings["p4_engine_path"]
# 以下为新增
self.AUTO_LAUNCH_ALL = self.auto_launch_all_settings["auto_launch_all"]
④搜索:data["osc_server_port"] = self.OSC_SERVER_PORT.get_value()
大概在2642行左右,后面新增三行代码,保存关闭
data["osc_server_port"] = self.OSC_SERVER_PORT.get_value()
# 以下为新增
data['auto_launch_all'] = self.AUTO_LAUNCH_ALL.get_value()
data['delay_time_connect'] = self.DELAY_TIME_CONNECT.get_value()
data['delay_time_launch'] = self.DELAY_TIME_LAUNCH.get_value()
3、文本打开“settings_dialog.py”文件,按ctrl+f
①搜索:self.general_settings_list = [
新增一行代码
self.general_settings_list = [
self._create_config_path_settings(),
self._create_auto_launch_settings(config), #本行新增
self._create_switchboard_settings(settings, config),
self._create_project_settings(config),
self._create_multi_user_server_settings(config)
]
②搜索:config.P4_ENABLED.signal_setting_changed.disconnect(self._on_source_control_setting_changed)
后面新增一行代码
config.P4_ENABLED.signal_setting_changed.disconnect(self._on_source_control_setting_changed)
# 以下新增
config.AUTO_LAUNCH_ALL.signal_setting_changed.disconnect(self._on_auto_launch_setting_changed)
③搜索:return self.ui.config_path_layout
后面新增一段代码
return self.ui.config_path_layout
# 以下为新增代码
def _create_auto_launch_settings(self, config: Config):
self.ui.auto_launch_settings_group = QtWidgets.QGroupBox()
self.ui.auto_launch_settings_group.setTitle("Auto Launch Settings")
self.ui.auto_launch_settings_group.setCheckable(True)
self.ui.auto_launch_settings_group.setStyleSheet(
'QGroupBox::indicator:checked:hover {image: url(:icons/images/check_box_checked_hovered.png);}'
'QGroupBox::indicator:checked {image: url(:icons/images/check_box_checked.png);}'
'QGroupBox::indicator:unchecked:hover {image: url(:icons/images/check_box_hovered.png);}'
'QGroupBox::indicator:unchecked {image: url(:icons/images/check_box.png);}'
)
form_layout = QtWidgets.QFormLayout(self.ui.auto_launch_settings_group)
self.ui.auto_launch_settings_group.setChecked(config.AUTO_LAUNCH_ALL.get_value())
self.ui.auto_launch_settings_group.toggled.connect(self._on_group_auto_launch_changed)
config.AUTO_LAUNCH_ALL.signal_setting_changed.connect(self._on_auto_launch_setting_changed)
self._create_settings_section(config.delay_time_settings, form_layout)
return self.ui.auto_launch_settings_group
④搜索:self._create_settings_section(settings_to_show, form_layout)
后面新增一段代码,保存关闭
self._create_settings_section(settings_to_show, form_layout)
# 以下为新增代码
def _on_group_auto_launch_changed(self):
CONFIG.AUTO_LAUNCH_ALL.update_value(self.ui.auto_launch_settings_group.isChecked())
CONFIG.save()
def _on_auto_launch_setting_changed(self, old_vlaue: bool, new_value: bool):
self.ui.auto_launch_settings_group.setChecked(new_value)
4、文本打开“switchboard_dialog.py”文件,按ctrl+f
①搜索:self.set_multiuser_session_name(f'{SETTINGS.MUSERVER_SESSION_NAME}')
后面新增一段代码
self.set_multiuser_session_name(f'{SETTINGS.MUSERVER_SESSION_NAME}')
# 以下为新增代码
if CONFIG.file_path:
if CONFIG.AUTO_LAUNCH_ALL.get_value():
LOGGER.success(f'Auto Launch ALL is Open !')
delaytimeconnect = CONFIG.DELAY_TIME_CONNECT.get_value()
delaytimelaunch = CONFIG.DELAY_TIME_LAUNCH.get_value()
thread1 = threading.Timer(delaytimeconnect, self.set_delay_connect_all)
thread1.start()
thread2 = threading.Timer(delaytimeconnect + delaytimelaunch, self.set_delay_launch_all)
thread2.start()_settings_group.setChecked(new_value)
②搜索:self.have_warned_about_muserver = False
后面新增一段代码,保存关闭
self.have_warned_about_muserver = False
# 以下为新增代码
def set_delay_connect_all(self):
try:
self.connect_all_button_clicked(QtCore.Qt.Checked)
LOGGER.success(f'Connect All Device!')
except:
LOGGER.error(f'can not Use this function')
def set_delay_launch_all(self):
try:
self.launch_all_button_clicked(QtCore.Qt.Checked)
LOGGER.success(f'Launch All Device!')
except:
LOGGER.error(f'can not Use this function')
5、启动switchboard,打开Setting,勾选AutoLaunchSettings,参数分别填1,这样下次启动Switchboard就会自动就连接和启动Ndisplay了。
参考:修改switchboard启动后添加延时自动连接并启动所有设备(UnrealEnging4.27)_哔哩哔哩_bilibili