如何在运行时向实例化对象添加脚本?

jat*_*49a 3 c# instantiation addition unity-game-engine

我的主资产文件夹中有一个脚本,名为BezierWalk.cs

在另一个脚本中Spawn,我尝试实例化预制件中的对象Sphere并附加到BezierWalk.cs它们。

Spawn脚本:

public class Spawn : MonoBehaviour
{

  public GameObject Sphere;
  //string ScriptName = "BezierWalk";

  void Start()
  {  
      Vector3 vSpawnPos = transform.position;

      for (int i = 0; i < 20; i++)
        {
          var objectYouCreate = Instantiate(Sphere, vSpawnPos, transform.rotation);
          //objectYouCreate.AddComponent<T>("Assets/BezierWalk.cs");
          //objectYouCreate.AddComponent(typeof(ScriptName)) as ScriptName;
          //objectYouCreate.AddComponent<ScriptName>();
          //var myScript = Sphere.AddComponent<BezierWalk.cs>();
          vSpawnPos.z += 20;
        }       
   }
Run Code Online (Sandbox Code Playgroud)

您可以看到注释掉的尝试...

我应该如何正确地做到这一点?谢谢。

Bug*_*der 5

如果您查看如何在统一中引用组件,答案应该很清楚 - 您是否尝试过列出的任何组件?

参考: https: //docs.unity3d.com/ScriptReference/GameObject.AddComponent.html

通常使用的是因为它易于阅读

objectYouCreate.AddComponent<ClassName>();

您可以使用

objectYouCreate.AddComponent(typeof(ClassName));

.cs 是供人类使用的,它是您可读的版本。所以你的代码中永远不需要 .cs 引用。

注意:我提到它是 ClassName 而不是 scriptname,因为虽然它们在统一的单一行为中是相同的,但在 c# 中的其他地方并不相同,所以重要的一点不是你创建的文件的名称,而是你创建的文件的名称。其中的类。

另一种方法是使用预制件,为您的对象制作一个预制件,其中包含您需要的所有组件。