首页 > 解决方案 > Unity:在 start() 中的其他对象上运行脚本

问题描述

我正在创建一个玩家控制的对象,该对象在其预制件中有一个脚本,该脚本将突出显示有效移动的图块。如果手动触发脚本可以正常工作,但在代码中无法这样做

public GameObject player_prefab;
Start(){
  GameObject playerUnit =  GameObject.Instantiate(player_prefab,PlayerPoss,player_prefab.transform.rotation);
  squadEvents squadScript = (squadEvents)playerUnit.GetComponent(typeof(squadEvents));
  squadScript.ShowWalkRange();}

在互联网上挖掘告诉我我的问题是我试图在启动期间访问脚本,但我找不到原因或想出解决方法,感谢您对这些问题的任何帮助

标签: c#unity3d

解决方案


需要注意的一点是,实例化对象的 Start() 方法直到其第一次 Update() 方法调用之前才被调用。如果您在其他对象的 Start() 方法中执行任何初始化,则可以将其移至 Awake() 方法。

也可能是您实际上没有正确找到组件?如果您使用 GetComponentInChildren,您将在此对象或任何预制子对象上搜索组件。

private void Start()
{
  GameObject playerUnit =  GameObject.Instantiate(player_prefab,PlayerPoss,player_prefab.transform.rotation);
  squadEvents squadScript = playerUnit.GetComponentInChildren<squadEvents>();
  if ( squadScript == null )
  {
    Debug.Log("Could not get <squadEvents> component in this GameObject or any of its children.");
    return;
  }
  squadScript.ShowWalkRange();
}

这是 GetComponentInChildren<T>() 的 Unity 参考


推荐阅读