Files
daluandou/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/EditorWindowNativeHandleHelper.cs
T
huadexuan 53d95802e5 ```
feat(gameplay): 更新单位属性和材质配置

- 调整多个单位的基础生命值和攻击力数值平衡
- 修改CoreBattleGround材质的纹理缩放比例
- 更新地砖材质颜色为白色
- 优化纹理资源设置,调整最大纹理尺寸并添加PlayableAds平台支持
- 修复弓箭手技能目标查找逻辑,改用统一的敌人检测方法
- 为水晶矿添加中立阵营设置和光球视觉效果同步
- 调整预制体中的全局缩放参数
- 为狼人和石巨人添加NavMeshAgent组件支持
- 优化水晶矿血条显示位置计算方式
```
2026-09-20 21:52:31 +08:00

115 lines
3.3 KiB
C#

#if UNITY_EDITOR_OSX || UNITY_EDITOR_WIN
using System;
using System.Reflection;
using UnityEditor;
namespace Cn.Tuanjie.Codely.Editor
{
public static class EditorWindowNativeHandleHelper
{
private const BindingFlags InstanceFlags =
BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public;
public static IntPtr GetGUIViewHandle(EditorWindow window)
{
if (window == null)
{
return IntPtr.Zero;
}
var parentField = typeof(EditorWindow).GetField("m_Parent", InstanceFlags);
object guiView = parentField?.GetValue(window);
if (guiView == null)
{
return IntPtr.Zero;
}
IntPtr nativeHandle = TryGetNativeHandleProperty(guiView);
if (nativeHandle != IntPtr.Zero)
{
return nativeHandle;
}
return TryGetViewPtrField(guiView);
}
private static IntPtr TryGetNativeHandleProperty(object guiView)
{
var nativeHandleProperty = guiView.GetType().GetProperty("nativeHandle", InstanceFlags);
if (nativeHandleProperty == null)
{
return IntPtr.Zero;
}
return TryConvertToIntPtr(nativeHandleProperty.GetValue(guiView, null));
}
private static IntPtr TryGetViewPtrField(object guiView)
{
var viewPtrField = GetFieldInTypeHierarchy(guiView.GetType(), "m_ViewPtr");
if (viewPtrField == null)
{
return IntPtr.Zero;
}
return TryConvertToIntPtr(viewPtrField.GetValue(guiView));
}
private static IntPtr TryConvertToIntPtr(object value)
{
if (value == null)
{
return IntPtr.Zero;
}
if (value is IntPtr ptr)
{
return ptr;
}
Type valueType = value.GetType();
foreach (string memberName in new[] { "m_IntPtr", "m_Ptr", "m_Value", "value" })
{
var field = GetFieldInTypeHierarchy(valueType, memberName);
if (field != null && field.FieldType == typeof(IntPtr))
{
return (IntPtr)field.GetValue(value);
}
var property = valueType.GetProperty(memberName, InstanceFlags);
if (property != null && property.PropertyType == typeof(IntPtr))
{
return (IntPtr)property.GetValue(value, null);
}
}
foreach (var field in valueType.GetFields(InstanceFlags))
{
if (field.FieldType == typeof(IntPtr))
{
return (IntPtr)field.GetValue(value);
}
}
return IntPtr.Zero;
}
private static FieldInfo GetFieldInTypeHierarchy(Type type, string name)
{
while (type != null)
{
var field = type.GetField(name, InstanceFlags);
if (field != null)
{
return field;
}
type = type.BaseType;
}
return null;
}
}
}
#endif