Update
This commit is contained in:
@@ -46,6 +46,16 @@ open_ui()
|
||||
|
||||
## 📝 注意事项
|
||||
|
||||
- 确保 Maya 版本兼容
|
||||
- 需要加载对应的插件
|
||||
- 自动检测 Maya 版本并加载对应插件
|
||||
- 支持 Maya 2018-2026 版本
|
||||
- 如果当前版本没有完全匹配的插件,会自动使用向下兼容的版本
|
||||
- 建议在绑定工作流程中使用
|
||||
|
||||
## 🔧 版本兼容性
|
||||
|
||||
启动器会自动检测当前 Maya 版本并加载对应的插件:
|
||||
- **完全匹配**:优先使用与 Maya 版本完全匹配的插件
|
||||
- **向下兼容**:如果没有完全匹配,使用小于等于当前版本的最高版本插件
|
||||
- **兜底策略**:如果当前版本比所有可用插件都旧,使用最旧的可用插件
|
||||
|
||||
支持的 Maya 版本:2018, 2019, 2020, 2022, 2023, 2024, 2025, 2026
|
||||
|
||||
@@ -9,13 +9,93 @@ ngSkinTools2 启动器
|
||||
import sys
|
||||
import os
|
||||
|
||||
def get_maya_version():
|
||||
"""
|
||||
获取当前 Maya 版本号
|
||||
返回格式: '2023', '2024' 等
|
||||
"""
|
||||
try:
|
||||
from maya import cmds
|
||||
maya_version = cmds.about(version=True)
|
||||
# Maya 版本格式可能是 "2023" 或 "2023.1" 等,取主版本号
|
||||
return maya_version.split('.')[0]
|
||||
except Exception as e:
|
||||
print(f"Failed to get Maya version: {e}")
|
||||
return None
|
||||
|
||||
|
||||
def find_compatible_plugin_dir(base_dir, maya_version):
|
||||
"""
|
||||
查找兼容的插件目录
|
||||
优先使用完全匹配的版本,如果没有则向下查找最接近的版本
|
||||
|
||||
Args:
|
||||
base_dir: 插件基础目录 (plug-ins/)
|
||||
maya_version: Maya 版本号字符串,如 '2023'
|
||||
|
||||
Returns:
|
||||
插件目录路径,如果找不到则返回 None
|
||||
"""
|
||||
if not maya_version:
|
||||
return None
|
||||
|
||||
try:
|
||||
maya_ver_int = int(maya_version)
|
||||
except ValueError:
|
||||
print(f"Invalid Maya version format: {maya_version}")
|
||||
return None
|
||||
|
||||
# 列出所有可用的插件版本目录
|
||||
available_versions = []
|
||||
if os.path.exists(base_dir):
|
||||
for item in os.listdir(base_dir):
|
||||
item_path = os.path.join(base_dir, item)
|
||||
if os.path.isdir(item_path):
|
||||
try:
|
||||
ver_int = int(item)
|
||||
available_versions.append((ver_int, item_path))
|
||||
except ValueError:
|
||||
continue
|
||||
|
||||
if not available_versions:
|
||||
return None
|
||||
|
||||
# 按版本号排序
|
||||
available_versions.sort(reverse=True)
|
||||
|
||||
# 首先尝试完全匹配
|
||||
for ver, path in available_versions:
|
||||
if ver == maya_ver_int:
|
||||
print(f"Found exact match plugin for Maya {maya_version}: {path}")
|
||||
return path
|
||||
|
||||
# 如果没有完全匹配,使用小于等于当前版本的最高版本
|
||||
for ver, path in available_versions:
|
||||
if ver <= maya_ver_int:
|
||||
print(f"Using compatible plugin for Maya {maya_version}: {path} (version {ver})")
|
||||
return path
|
||||
|
||||
# 如果当前版本比所有可用版本都旧,使用最旧的版本
|
||||
oldest_ver, oldest_path = available_versions[-1]
|
||||
print(f"Warning: Maya {maya_version} is older than available plugins. Using oldest: {oldest_path} (version {oldest_ver})")
|
||||
return oldest_path
|
||||
|
||||
|
||||
def LaunchNgSkinTools():
|
||||
"""
|
||||
启动 ngSkinTools2 主界面
|
||||
自动检测 Maya 版本并加载对应的插件
|
||||
"""
|
||||
try:
|
||||
from maya import cmds, mel
|
||||
|
||||
# 获取当前 Maya 版本
|
||||
maya_version = get_maya_version()
|
||||
if not maya_version:
|
||||
print("Warning: Could not determine Maya version, will try to continue anyway")
|
||||
else:
|
||||
print(f"Detected Maya version: {maya_version}")
|
||||
|
||||
# 将当前目录添加到 Python 路径,并使用别名
|
||||
# 这样 ngSkinTools2 内部的 "from ngSkinTools2.ui" 就能找到模块
|
||||
current_dir = os.path.dirname(os.path.abspath(__file__))
|
||||
@@ -34,22 +114,33 @@ def LaunchNgSkinTools():
|
||||
sys.modules['ngSkinTools2'] = ngskintools2_module
|
||||
|
||||
# 查找并添加插件路径
|
||||
# ngSkinTools2 插件在 ngskintools2/plug-ins/2023/ 下
|
||||
plugin_dir = os.path.join(current_dir, 'plug-ins', '2023')
|
||||
# 根据 Maya 版本自动选择对应的插件目录
|
||||
plugin_base_dir = os.path.join(current_dir, 'plug-ins')
|
||||
plugin_dir = find_compatible_plugin_dir(plugin_base_dir, maya_version)
|
||||
|
||||
if os.path.exists(plugin_dir):
|
||||
if plugin_dir and os.path.exists(plugin_dir):
|
||||
# 添加插件路径
|
||||
current_plugin_path = os.environ.get('MAYA_PLUG_IN_PATH', '')
|
||||
if plugin_dir not in current_plugin_path:
|
||||
os.environ['MAYA_PLUG_IN_PATH'] = plugin_dir + os.pathsep + current_plugin_path
|
||||
|
||||
# 加载插件
|
||||
if not cmds.pluginInfo('ngSkinTools2', query=True, loaded=True):
|
||||
try:
|
||||
# 检查插件是否已加载
|
||||
if not cmds.pluginInfo('ngSkinTools2', query=True, loaded=True):
|
||||
cmds.loadPlugin(os.path.join(plugin_dir, 'ngSkinTools2.mll'))
|
||||
print(f"ngSkinTools2 plugin loaded successfully from {plugin_dir}")
|
||||
else:
|
||||
print(f"ngSkinTools2 plugin already loaded")
|
||||
except RuntimeError:
|
||||
# 插件不存在,尝试加载
|
||||
try:
|
||||
cmds.loadPlugin(os.path.join(plugin_dir, 'ngSkinTools2.mll'))
|
||||
print("ngSkinTools2 plugin loaded successfully")
|
||||
print(f"ngSkinTools2 plugin loaded successfully from {plugin_dir}")
|
||||
except Exception as plugin_error:
|
||||
print(f"Warning: Could not load ngSkinTools2 plugin: {plugin_error}")
|
||||
except Exception as plugin_error:
|
||||
print(f"Warning: Could not load ngSkinTools2 plugin: {plugin_error}")
|
||||
else:
|
||||
print(f"Warning: Plugin directory not found: {plugin_dir}")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user