c# - 无需实例化的预制件的 Awake()
问题描述
我有一个脚本,它接受一个预制件,稍后它会从中实例化对象。
该预制件在其组件之一中有一些静态数据,我希望在实例化任何东西之前读取这些数据,为此我需要自然地使用GetComponent()
. 后来该数据被实例多次读取,所以我不想一直使用GetComponent()
,因为我知道这是一个相当繁重的操作。所以很自然地,像往常一样,我保留了一个保存该组件的变量并在Awake()
函数中初始化该变量。
问题是,Awake()
预制件本身不会调用该函数,而只会为我稍后使用Instantiate()
.
换句话说,理想情况下我想这样做:
void Awake()
{
imageSelector = GetComponent<ImageSelector>();
}
public int MaxValue => imageSelector.Count;
但是为了让它在实例化之前为预制本身工作,我需要这样做:
public int MaxValue => GetComponent<ImageSelector>().Count;
当然,我可以进行类似单例的读取访问,检查我是否已经保存了组件,如果没有,则获取并保存它,但这不是很好,对我来说似乎有一些初始化过程是合理的我可以做这件事。
那么如何为未实例化的预制件初始化事物呢?
我还想到了其他一些解决方法,我特别喜欢其中的一种,但如果有必要我会使用其中一种——不过,我想知道是否有一种干净的方法可以做到这一点。
提前致谢。
解决方案
你不能
Prefab 没有调用 MonoBehaviour 方法,因为它们没有被初始化——也永远不会被初始化。
请注意,您可以自己在检查器中分配属性,而根本不用担心Awake
调用。
推荐阅读
- python - tensorflow运行后,ipython控制台变回[1]
- ibm-cloud - 使用 Lite 帐户创建免费的 IBM Cloud Analytics Engine 实例时出现错误“您的帐户未被授权选择 Lite 计划”
- java - 在 ListView 中动态添加 LinearLayout
- amazon-web-services - AWS DataSync 无法检测到源 NFS 文件系统中的任何文件
- sql - Json 中 Json 对象的 SQL 查询
- docker - /dev/stderr 上的权限被拒绝,这阻止我将日志重定向到 cloudwatch
- vscode-settings - 如何修复 VS Code 启动错误:bash: 意外标记附近的语法错误 `('
- javascript - 如何在 React JS 和 Firebase 中处理用户登录状态?
- javascript - 来自Android中KeyboardEvent的事件键无法识别
- javascript - 小数后精确四舍五入