我有一个目标列表,当我示例化我游戏对象时,我将这个对象添加到一个列表中,并使用PlayerPrefs为我的对象设置一个Id。我的问题是我调用了一个使用列表的方法onEnable,因为OnEnable发生在脚本的下一行之前,我得到一个ArgumentOutOfRangeException。我可以禁用我的预置,但我不喜欢的想法,如果有人激活它错误,它会给予我一个错误。有人知道我如何添加对象到我的列表之前,“启用”发生?
这是我最后示例化游戏对象的脚本:
private void CreateTargetOnNetwork(Vector3 position, Quaternion rotation)
{
PlayerPrefs.SetInt("Index", index);
targetsList.Add(Instantiate(Resources.Load("TargetPrefabNetwork") as GameObject, position, rotation, areaTargetManager.GetCurrentArea().transform));
index++;
}
[PunRPC]
private void UpdateTargetOnOffOnNetwork(int id, bool status)
{
targetsList[id].SetActive(status);
}
这是我在游戏对象上的脚本:
private void Awake()
{
_targetIndex = PlayerPrefs.GetInt("Index");
PlayerPrefs.DeleteKey("Index");
targetManager = FindObjectOfType<TargetManager>();
targetManagerPhotonView = targetManager.GetComponent<PhotonView>();
}
private void OnEnable()
{
targetManagerPhotonView.RPC("UpdateTargetOnOffOnNetwork", RpcTarget.AllBuffered, _targetIndex, true);
}
我使用光子,但这不是我的问题,所以RPC就像调用一个方法。
2条答案
按热度按时间sauutmhj1#
您可以使用较早的执行顺序向示例化的GameObject添加第二个组件,并让该组件在其初始化期间调用静态事件,该事件将在其他组件初始化之前发生。
用法:
qnakjoqk2#
我能想到的一个解决方案是相反的,通过一个标志来防止
OnEnable
在一个特殊的初始化情况下出现。然后,在将其添加到列表后,显式调用一次,设置标志,并从那里开始使用
OnEnable
。通过一些重构,我可能会做如下操作
然后装上