用的最新版injectfix inject的时候报错
报错信息如下: at IFix.CodeTranslator.getMethodId (Mono.Cecil.MethodReference callee, Mono.Cecil.MethodDefinition caller, System.Boolean isCallvirt, System.Boolean directCallVirtual, IFix.CodeTranslator+InjectType callerInjectType) [0x01270] in C:\Users\Administrator\Documents\GitHub\InjectFix\Source\VSProj\Src\Tools\CodeTranslator.cs:1631 UnityEngine.Debug:Log(Object) IFix.Editor.IFixEditor:CallIFix(List`1) (at Assets/IFix/Editor/ILFixEditor.cs:136) IFix.Editor.IFixEditor:InjectAssembly(String) (at Assets/IFix/Editor/ILFixEditor.cs:308) IFix.Editor.IFixEditor:InjectAllAssemblys() (at Assets/IFix/Editor/ILFixEditor.cs:328) IFix.Editor.IFixEditor:InjectAssemblys() (at Assets/IFix/Editor/ILFixEditor.cs:158)
我在代码里把log打到文件里详细信息是这样子: can not find the proxy for System.Int32 UIWidget::get_minWidth(), in UILabel
这是NGUI代码,看起来是调用了父类方法,代码如下,有base.的部分 ,当前类并没有重写minWidth,然后我发现 把base.minWidth前的base去掉,直接写minWidth,此时inject就不会报错了。 public override void MakePixelPerfect () { if (ambigiousFont != null) { Vector3 pos = cachedTransform.localPosition; pos.x = Mathf.RoundToInt(pos.x); pos.y = Mathf.RoundToInt(pos.y); pos.z = Mathf.RoundToInt(pos.z);
cachedTransform.localPosition = pos;
cachedTransform.localScale = Vector3.one;
if (mOverflow == Overflow.ResizeFreely)
{
AssumeNaturalSize();
}
else
{
int w = width;
int h = height;
Overflow over = mOverflow;
if (over != Overflow.ResizeHeight) mWidth = 100000;
mHeight = 100000;
mOverflow = Overflow.ShrinkContent;
ProcessText(false, true);
mOverflow = over;
int minX = Mathf.RoundToInt(mCalculatedSize.x);
int minY = Mathf.RoundToInt(mCalculatedSize.y);
minX = Mathf.Max(minX, base.minWidth);
minY = Mathf.Max(minY, base.minHeight);
if ((minX & 1) == 1) ++minX;
if ((minY & 1) == 1) ++minY;
mWidth = Mathf.Max(w, minX);
mHeight = Mathf.Max(h, minY);
MarkAsChanged();
}
}
else base.MakePixelPerfect();
}