Unity:在start()中的其他对象上运行脚本

时间:2018-06-12 01:15:34

标签: c# unity3d

我正在创建一个玩家控制的对象,其预制件中有一个脚本,用于突出显示有效移动的切片。 如果手动触发脚本可以正常工作,但在代码

中无法执行此操作
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();}

在互联网上挖掘告诉我我的问题是我在启动时尝试访问脚本的事实,但我找不到原因或想出一个解决方法,感谢您对这些问题的任何帮助< / p>

1 个答案:

答案 0 :(得分:1)

需要注意的一点是,在第一次Update()方法调用之前,不会调用instatiated对象的Start()方法。如果您在其他对象的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();
}

Here's the Unity reference适用于GetComponentInChildren&lt; T&gt;()。