如何在运行时将脚本添加到实例化对象?
How to add Script to instantiated object at runtime?
我的主资产文件夹中有一个名为 BezierWalk.cs
的脚本
在另一个脚本 Spawn
中,我试图从 Prefab 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;
}
}
您可以看到注释掉的尝试...
我应该如何正确地做到这一点?谢谢。
如果您查看如何在 unity 中引用组件,答案应该很明确 - 您是否尝试过列出的任何组件?
参考:https://docs.unity3d.com/ScriptReference/GameObject.AddComponent.html
常用的是方便阅读
objectYouCreate.AddComponent<ClassName>();
你可以使用
objectYouCreate.AddComponent(typeof(ClassName));
.cs 适用于人类,它是您的可读版本。所以您永远不需要在您的代码中引用 .cs。
注意:我提到它是类名而不是脚本名,因为虽然它们在单一行为中是相同的,但在 c# 中的其他任何地方都不一样所以,重要的一点不是你制作的文件的名称,但是其中 class 的名称。
另一种方法是使用预制件,为您的对象制作一个预制件,其中包含您需要的所有组件。
如果您的脚本位于某个命名空间内,您应该遵循以下格式
GameObject.AddComponent(typeof(namespace.className))
;
我的主资产文件夹中有一个名为 BezierWalk.cs
在另一个脚本 Spawn
中,我试图从 Prefab 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;
}
}
您可以看到注释掉的尝试...
我应该如何正确地做到这一点?谢谢。
如果您查看如何在 unity 中引用组件,答案应该很明确 - 您是否尝试过列出的任何组件?
参考:https://docs.unity3d.com/ScriptReference/GameObject.AddComponent.html
常用的是方便阅读
objectYouCreate.AddComponent<ClassName>();
你可以使用
objectYouCreate.AddComponent(typeof(ClassName));
.cs 适用于人类,它是您的可读版本。所以您永远不需要在您的代码中引用 .cs。
注意:我提到它是类名而不是脚本名,因为虽然它们在单一行为中是相同的,但在 c# 中的其他任何地方都不一样所以,重要的一点不是你制作的文件的名称,但是其中 class 的名称。
另一种方法是使用预制件,为您的对象制作一个预制件,其中包含您需要的所有组件。
如果您的脚本位于某个命名空间内,您应该遵循以下格式
GameObject.AddComponent(typeof(namespace.className))
;