chore: 角色展示修复高分辨率屏幕UI错位
This commit is contained in:
@@ -1,175 +1,175 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using UnityEngine;
|
||||
|
||||
namespace CharacterPreview
|
||||
{
|
||||
public static class Load_DuckovCustomModel
|
||||
{
|
||||
public static ModelMove? CreateModel()
|
||||
{
|
||||
Action startMethod = null;
|
||||
Action midMethod = null;
|
||||
Action endMethod = null;
|
||||
// 尝试获取 LevelManager_OnLevelBeginInitializing
|
||||
try
|
||||
{
|
||||
Debug.Log("\n[Main Runner] 尝试获取 LevelManager_OnLevelBeginInitializing...");
|
||||
startMethod =
|
||||
GetPrivateStaticVoidMethod(
|
||||
"DuckovCustomModel.ModEntry.LevelManager_OnLevelBeginInitializing");
|
||||
Debug.Log("[Main Runner] 成功获取 LevelManager_OnLevelBeginInitializing 委托。");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.LogError(
|
||||
$"[Main Runner] <color=red>获取 LevelManager_OnLevelBeginInitializing 时发生错误:</color> {ex.GetType().Name} - {ex.Message}");
|
||||
}
|
||||
|
||||
// 尝试获取 LevelManager_OnLevelInitialized
|
||||
try
|
||||
{
|
||||
Debug.Log("\n[Main Runner] 尝试获取 LevelManager_OnLevelInitialized...");
|
||||
midMethod = GetPrivateStaticVoidMethod(
|
||||
"DuckovCustomModel.ModEntry.LevelManager_OnLevelInitialized");
|
||||
Debug.Log("[Main Runner] 成功获取 LevelManager_OnLevelInitialized 委托。");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.LogError(
|
||||
$"[Main Runner] <color=red>获取 LevelManager_OnLevelInitialized 时发生错误:</color> {ex.GetType().Name} - {ex.Message}");
|
||||
}
|
||||
|
||||
// 尝试获取 LevelManager_OnAfterLevelInitialized
|
||||
try
|
||||
{
|
||||
Debug.Log("\n[Main Runner] 尝试获取 LevelManager_OnAfterLevelInitialized...");
|
||||
endMethod = GetPrivateStaticVoidMethod(
|
||||
"DuckovCustomModel.ModEntry.LevelManager_OnAfterLevelInitialized");
|
||||
Debug.Log("[Main Runner] 成功获取 LevelManager_OnAfterLevelInitialized 委托。");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.LogError(
|
||||
$"[Main Runner] <color=red>获取 LevelManager_OnAfterLevelInitialized 时发生错误:</color> {ex.GetType().Name} - {ex.Message}");
|
||||
}
|
||||
|
||||
Debug.Log("\n[Main Runner] --- 调用获取到的方法 ---");
|
||||
if (startMethod != null)
|
||||
{
|
||||
Debug.Log("[Main Runner] 正在调用 LevelManager_OnLevelBeginInitializing...");
|
||||
startMethod.Invoke();
|
||||
Debug.Log("[Main Runner] LevelManager_OnLevelBeginInitializing 调用完成。");
|
||||
}
|
||||
else
|
||||
Debug.LogWarning("[Main Runner] LevelManager_OnLevelBeginInitializing 委托为 null,跳过调用。");
|
||||
|
||||
if (midMethod != null)
|
||||
{
|
||||
Debug.Log("[Main Runner] 正在调用 LevelManager_OnLevelInitialized...");
|
||||
midMethod.Invoke();
|
||||
Debug.Log("[Main Runner] LevelManager_OnLevelInitialized 调用完成。");
|
||||
}
|
||||
else
|
||||
Debug.LogWarning("[Main Runner] LevelManager_OnLevelInitialized 委托为 null,跳过调用。");
|
||||
|
||||
if (endMethod != null)
|
||||
{
|
||||
Debug.Log("[Main Runner] 正在调用 LevelManager_OnAfterLevelInitialized...");
|
||||
endMethod.Invoke();
|
||||
Debug.Log("[Main Runner] LevelManager_OnAfterLevelInitialized 调用完成。");
|
||||
}
|
||||
else
|
||||
Debug.LogWarning("[Main Runner] LevelManager_OnAfterLevelInitialized 委托为 null,跳过调用。");
|
||||
// var target = DuckovCustomModel.Core.Data.ModelTarget.Character;
|
||||
//
|
||||
// Debug.Log("运行替换");
|
||||
// var currentModelID = DuckovCustomModel.ModEntry.UsingModel?.GetModelID(target) ?? string.Empty;
|
||||
// if (string.IsNullOrEmpty(currentModelID))
|
||||
// {
|
||||
// // 错误日志:未能获取当前模型ID
|
||||
// Debug.LogError($"[DuckovCustomModel] Failed to get current model ID for target '{target}'. Current model reference might be null or GetModelID returned null/empty. Returning null.");
|
||||
// return null;
|
||||
// }
|
||||
// // 注意:out _ 用于忽略 ModelManager 返回的第一个 out 参数
|
||||
// if (!DuckovCustomModel.Managers.ModelManager.FindModelByID(currentModelID, out _, out var modelInfo))
|
||||
// {
|
||||
// // 错误日志:未能找到指定的模型
|
||||
// Debug.LogError($"[DuckovCustomModel] Model with ID '{currentModelID}' not found by ModelManager for target '{target}'. Returning null.");
|
||||
// return null;
|
||||
// }
|
||||
// if (!modelInfo.CompatibleWithType(target))
|
||||
// {
|
||||
// // 错误日志:模型与目标不兼容
|
||||
// Debug.LogError($"[DuckovCustomModel] Model '{currentModelID}' is not compatible with target '{target}'. Returning null.");
|
||||
// return null;
|
||||
// }
|
||||
// Debug.Log($"inf{currentModelID}");
|
||||
// // 如果前面的检查都通过,则应用模型
|
||||
// DuckovCustomModel.Managers.ModelListManager.ApplyModelToTarget(target, currentModelID, true);
|
||||
//
|
||||
// var handlers=DuckovCustomModel.Managers.ModelManager.GetAllModelHandlers(target);
|
||||
// Debug.Log($"handlers{handlers.Count}");
|
||||
// Debug.Log("运行完成");
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Action GetPrivateStaticVoidMethod(string fullMethodName)
|
||||
{
|
||||
var lastDotIndex = fullMethodName.LastIndexOf('.');
|
||||
if (lastDotIndex == -1 || lastDotIndex == fullMethodName.Length - 1)
|
||||
{
|
||||
throw new ArgumentException($"无效的方法名格式: {fullMethodName}。应为 'Namespace.ClassName.MethodName'。");
|
||||
}
|
||||
|
||||
var fullTypeName = fullMethodName.Substring(0, lastDotIndex);
|
||||
var methodName = fullMethodName.Substring(lastDotIndex + 1);
|
||||
Type targetType = null;
|
||||
foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
|
||||
{
|
||||
targetType = assembly.GetType(fullTypeName);
|
||||
if (targetType != null)
|
||||
{
|
||||
break; // 找到类型后停止搜索
|
||||
}
|
||||
}
|
||||
|
||||
if (targetType == null)
|
||||
{
|
||||
throw new TypeLoadException($"在任何已加载的程序集中都未找到类型: {fullTypeName}。");
|
||||
}
|
||||
|
||||
var methodInfo = targetType.GetMethod(
|
||||
methodName,
|
||||
BindingFlags.NonPublic | BindingFlags.Static
|
||||
);
|
||||
if (methodInfo == null)
|
||||
{
|
||||
throw new MissingMethodException(
|
||||
$"在类型 '{fullTypeName}' 中未找到名为 '{methodName}' 的私有静态方法," +
|
||||
$"或者该方法不满足私有、静态、无参的条件。"
|
||||
);
|
||||
}
|
||||
|
||||
if (methodInfo.GetParameters().Length != 0)
|
||||
{
|
||||
throw new MissingMethodException(
|
||||
$"方法 '{fullMethodName}' 存在参数,不符合无参 Action 的要求。"
|
||||
);
|
||||
}
|
||||
|
||||
if (methodInfo.ReturnType != typeof(void))
|
||||
{
|
||||
throw new MissingMethodException(
|
||||
$"方法 '{fullMethodName}' 返回值不是 void,不符合 Action 的要求。"
|
||||
);
|
||||
}
|
||||
|
||||
return (Action)methodInfo.CreateDelegate(typeof(Action));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
// using System;
|
||||
// using System.Linq;
|
||||
// using System.Reflection;
|
||||
// using UnityEngine;
|
||||
//
|
||||
// namespace CharacterPreview
|
||||
// {
|
||||
// public static class Load_DuckovCustomModel
|
||||
// {
|
||||
// public static ModelMove? CreateModel()
|
||||
// {
|
||||
// Action startMethod = null;
|
||||
// Action midMethod = null;
|
||||
// Action endMethod = null;
|
||||
// // 尝试获取 LevelManager_OnLevelBeginInitializing
|
||||
// try
|
||||
// {
|
||||
// Debug.Log("\n[Main Runner] 尝试获取 LevelManager_OnLevelBeginInitializing...");
|
||||
// startMethod =
|
||||
// GetPrivateStaticVoidMethod(
|
||||
// "DuckovCustomModel.ModEntry.LevelManager_OnLevelBeginInitializing");
|
||||
// Debug.Log("[Main Runner] 成功获取 LevelManager_OnLevelBeginInitializing 委托。");
|
||||
// }
|
||||
// catch (Exception ex)
|
||||
// {
|
||||
// Debug.LogError(
|
||||
// $"[Main Runner] <color=red>获取 LevelManager_OnLevelBeginInitializing 时发生错误:</color> {ex.GetType().Name} - {ex.Message}");
|
||||
// }
|
||||
//
|
||||
// // 尝试获取 LevelManager_OnLevelInitialized
|
||||
// try
|
||||
// {
|
||||
// Debug.Log("\n[Main Runner] 尝试获取 LevelManager_OnLevelInitialized...");
|
||||
// midMethod = GetPrivateStaticVoidMethod(
|
||||
// "DuckovCustomModel.ModEntry.LevelManager_OnLevelInitialized");
|
||||
// Debug.Log("[Main Runner] 成功获取 LevelManager_OnLevelInitialized 委托。");
|
||||
// }
|
||||
// catch (Exception ex)
|
||||
// {
|
||||
// Debug.LogError(
|
||||
// $"[Main Runner] <color=red>获取 LevelManager_OnLevelInitialized 时发生错误:</color> {ex.GetType().Name} - {ex.Message}");
|
||||
// }
|
||||
//
|
||||
// // 尝试获取 LevelManager_OnAfterLevelInitialized
|
||||
// try
|
||||
// {
|
||||
// Debug.Log("\n[Main Runner] 尝试获取 LevelManager_OnAfterLevelInitialized...");
|
||||
// endMethod = GetPrivateStaticVoidMethod(
|
||||
// "DuckovCustomModel.ModEntry.LevelManager_OnAfterLevelInitialized");
|
||||
// Debug.Log("[Main Runner] 成功获取 LevelManager_OnAfterLevelInitialized 委托。");
|
||||
// }
|
||||
// catch (Exception ex)
|
||||
// {
|
||||
// Debug.LogError(
|
||||
// $"[Main Runner] <color=red>获取 LevelManager_OnAfterLevelInitialized 时发生错误:</color> {ex.GetType().Name} - {ex.Message}");
|
||||
// }
|
||||
//
|
||||
// Debug.Log("\n[Main Runner] --- 调用获取到的方法 ---");
|
||||
// if (startMethod != null)
|
||||
// {
|
||||
// Debug.Log("[Main Runner] 正在调用 LevelManager_OnLevelBeginInitializing...");
|
||||
// startMethod.Invoke();
|
||||
// Debug.Log("[Main Runner] LevelManager_OnLevelBeginInitializing 调用完成。");
|
||||
// }
|
||||
// else
|
||||
// Debug.LogWarning("[Main Runner] LevelManager_OnLevelBeginInitializing 委托为 null,跳过调用。");
|
||||
//
|
||||
// if (midMethod != null)
|
||||
// {
|
||||
// Debug.Log("[Main Runner] 正在调用 LevelManager_OnLevelInitialized...");
|
||||
// midMethod.Invoke();
|
||||
// Debug.Log("[Main Runner] LevelManager_OnLevelInitialized 调用完成。");
|
||||
// }
|
||||
// else
|
||||
// Debug.LogWarning("[Main Runner] LevelManager_OnLevelInitialized 委托为 null,跳过调用。");
|
||||
//
|
||||
// if (endMethod != null)
|
||||
// {
|
||||
// Debug.Log("[Main Runner] 正在调用 LevelManager_OnAfterLevelInitialized...");
|
||||
// endMethod.Invoke();
|
||||
// Debug.Log("[Main Runner] LevelManager_OnAfterLevelInitialized 调用完成。");
|
||||
// }
|
||||
// else
|
||||
// Debug.LogWarning("[Main Runner] LevelManager_OnAfterLevelInitialized 委托为 null,跳过调用。");
|
||||
// // var target = DuckovCustomModel.Core.Data.ModelTarget.Character;
|
||||
// //
|
||||
// // Debug.Log("运行替换");
|
||||
// // var currentModelID = DuckovCustomModel.ModEntry.UsingModel?.GetModelID(target) ?? string.Empty;
|
||||
// // if (string.IsNullOrEmpty(currentModelID))
|
||||
// // {
|
||||
// // // 错误日志:未能获取当前模型ID
|
||||
// // Debug.LogError($"[DuckovCustomModel] Failed to get current model ID for target '{target}'. Current model reference might be null or GetModelID returned null/empty. Returning null.");
|
||||
// // return null;
|
||||
// // }
|
||||
// // // 注意:out _ 用于忽略 ModelManager 返回的第一个 out 参数
|
||||
// // if (!DuckovCustomModel.Managers.ModelManager.FindModelByID(currentModelID, out _, out var modelInfo))
|
||||
// // {
|
||||
// // // 错误日志:未能找到指定的模型
|
||||
// // Debug.LogError($"[DuckovCustomModel] Model with ID '{currentModelID}' not found by ModelManager for target '{target}'. Returning null.");
|
||||
// // return null;
|
||||
// // }
|
||||
// // if (!modelInfo.CompatibleWithType(target))
|
||||
// // {
|
||||
// // // 错误日志:模型与目标不兼容
|
||||
// // Debug.LogError($"[DuckovCustomModel] Model '{currentModelID}' is not compatible with target '{target}'. Returning null.");
|
||||
// // return null;
|
||||
// // }
|
||||
// // Debug.Log($"inf{currentModelID}");
|
||||
// // // 如果前面的检查都通过,则应用模型
|
||||
// // DuckovCustomModel.Managers.ModelListManager.ApplyModelToTarget(target, currentModelID, true);
|
||||
// //
|
||||
// // var handlers=DuckovCustomModel.Managers.ModelManager.GetAllModelHandlers(target);
|
||||
// // Debug.Log($"handlers{handlers.Count}");
|
||||
// // Debug.Log("运行完成");
|
||||
//
|
||||
// return null;
|
||||
// }
|
||||
//
|
||||
// public static Action GetPrivateStaticVoidMethod(string fullMethodName)
|
||||
// {
|
||||
// var lastDotIndex = fullMethodName.LastIndexOf('.');
|
||||
// if (lastDotIndex == -1 || lastDotIndex == fullMethodName.Length - 1)
|
||||
// {
|
||||
// throw new ArgumentException($"无效的方法名格式: {fullMethodName}。应为 'Namespace.ClassName.MethodName'。");
|
||||
// }
|
||||
//
|
||||
// var fullTypeName = fullMethodName.Substring(0, lastDotIndex);
|
||||
// var methodName = fullMethodName.Substring(lastDotIndex + 1);
|
||||
// Type targetType = null;
|
||||
// foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
|
||||
// {
|
||||
// targetType = assembly.GetType(fullTypeName);
|
||||
// if (targetType != null)
|
||||
// {
|
||||
// break; // 找到类型后停止搜索
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// if (targetType == null)
|
||||
// {
|
||||
// throw new TypeLoadException($"在任何已加载的程序集中都未找到类型: {fullTypeName}。");
|
||||
// }
|
||||
//
|
||||
// var methodInfo = targetType.GetMethod(
|
||||
// methodName,
|
||||
// BindingFlags.NonPublic | BindingFlags.Static
|
||||
// );
|
||||
// if (methodInfo == null)
|
||||
// {
|
||||
// throw new MissingMethodException(
|
||||
// $"在类型 '{fullTypeName}' 中未找到名为 '{methodName}' 的私有静态方法," +
|
||||
// $"或者该方法不满足私有、静态、无参的条件。"
|
||||
// );
|
||||
// }
|
||||
//
|
||||
// if (methodInfo.GetParameters().Length != 0)
|
||||
// {
|
||||
// throw new MissingMethodException(
|
||||
// $"方法 '{fullMethodName}' 存在参数,不符合无参 Action 的要求。"
|
||||
// );
|
||||
// }
|
||||
//
|
||||
// if (methodInfo.ReturnType != typeof(void))
|
||||
// {
|
||||
// throw new MissingMethodException(
|
||||
// $"方法 '{fullMethodName}' 返回值不是 void,不符合 Action 的要求。"
|
||||
// );
|
||||
// }
|
||||
//
|
||||
// return (Action)methodInfo.CreateDelegate(typeof(Action));
|
||||
// }
|
||||
// }
|
||||
//
|
||||
//
|
||||
// }
|
||||
Reference in New Issue
Block a user