【提问】如何明确“点击某按钮后、计算机执行了哪个函数”?

我希望知道:在Unity中对游戏物体按下Ctrl+D复制粘贴的时候,具体发生了什么。

背景是这样的:我在2021.3.0f1c1版本的Unity中创建了一个UI输入框(TMP_InputField),我发现代码动态创建的输入框无法显示光标,但是创建后在编辑器中手动复制粘贴一下、就能够显示光标了。

并且:

1.如果在运行【前】在编辑器中右键创建输入框,然后运行,那么能够显示光标。

2.如果在运行【后】在编辑器中右键创建输入框,那么无法显示光标。但对它复制粘贴后可以显示光标。

所以我希望知道复制粘贴的时候发生了什么。一定是有什么东西改变了、才导致复制粘贴后能够显示光标。

单机游戏中有一个著名的修改器:CE修改器。它可以监测内存中哪些变量改变了,从而以此定位游戏数据,然后修改游戏数据。

我想问:有没有类似的工具,能够监测【按下Ctrl+D之后、计算机执行了哪个函数】?

Comments
登录后评论
Sign In
·

问题未解决,但原始问题已解决。(问题:本帖标题。原始问题:如何在Unity中让代码创建的输入框能够显示光标。)

考虑到有人可能希望我将解决过程发出来,因此我描述我的解决过程:

我先是意识到Unity源码中应该有对复制粘贴的定义,于是查Unity源码,查到源码位于编辑器安装路径下的Editor/Data/Resources/PackageManager/BuiltInPackages/com.unity.ugui

阅读了源码后,我找到了编辑器菜单栏中InputField的原理,但是依然没找到运行的函数与复制粘贴的函数。

然后,我去谷歌搜索【TMP_InputField missing caret】,没找到满意的文章。(之前已经在百度与CSDN搜了一圈,没搜到有价值的东西。)

我又搜索【create TMP_InputField with code】,找到了这篇文章:https://forum.unity.com/threads/creating-a-complete-tmp-input-field-via-script.625735/

这篇文章中作者遇到了和我一样的问题,解决方式是使用TMP_InputField的OnEnable函数。

但是这是2015年的文章。我在我的编辑器中尝试使用OnEnable,但是它是私有函数、禁止使用。

后来我发现可以对TMP_InputField所在的GameObject使用SetActive函数,它会调用OnEnable。

于是成功解决问题,代码创建的文本框也可以显示光标了。