C# 如何在脚本添加到实例化对象时访问脚本的属性,并在代码中设置转换

C# 如何在脚本添加到实例化对象时访问脚本的属性,并在代码中设置转换,c#,unity3d,C#,Unity3d,我的脚本中有一部分使用For循环实例化对象: C# 我通过执行以下操作附加脚本: enemyDragons2[i].AddComponent<SeekChase>(); enemyDragons2[i].AddComponent(); 脚本确实附加了,但我的SeekChase脚本采用了一种转换,我通常会将其拖到检查器中 ……但我想用脚本来完成 我知道我必须这样做: enemyDragons2[i].Get Component<SeekChase>().....

我的脚本中有一部分使用For循环实例化对象:

C#

我通过执行以下操作附加脚本:

 enemyDragons2[i].AddComponent<SeekChase>(); 
enemyDragons2[i].AddComponent();
脚本确实附加了,但我的SeekChase脚本采用了一种转换,我通常会将其拖到检查器中

……但我想用脚本来完成

我知道我必须这样做:

 enemyDragons2[i].Get Component<SeekChase>().....properties.Name=..set...;  
enemyDragons2[i].Get Component()…properties.Name=…set。。。;
我看了这里:(并认为它们是解决方案):

在这里:

我知道我可以将转换硬编码到SeekChase脚本中,或者将SeekChase脚本附加到预置中,并在inspector中手动添加转换,但我希望通过代码来实现这一点,以使事情更加动态。(因此,我可以通过更改变换为不同的敌人使用相同的脚本)

当SeekChase脚本被添加到实例化对象中时,如何进入该脚本,并将转换设置为代码中所需的转换

任何帮助都将不胜感激


谢谢。

您有一个变量,它是一种称为
敌方
的转换类型,您希望使用场景中名为“敌方”的游戏对象的转换来初始化该
敌方
变量

根据您的截图和评论,以下是您应该做的:

找到敌人

GameObject yourEnemy = GameObject.Find("Enemy");
在SeekChase脚本中设置敌人变量转换

enemyDragons2[i].GetComponent<SeekChase>().enemy = yourEnemy.transform;
enemyDragons2[i].GetComponent().敌方=你的敌方.transform;
对于其他代码,它应该类似于blow:

//Instantiate prefab
enemyDragons2[i] = (GameObject)Instantiate(enemyDragonStandIn,
PlaceToSpawn - Vector3.forward * 20.4f, Quaternion.identity);

//Attach script
enemyDragons2[i].AddComponent<SeekChase>();

//Find the Enemy
GameObject yourEnemy = GameObject.Find("Enemy");

//Set the enemy
enemyDragons2[i].GetComponent<SeekChase>().enemy = yourEnemy.transform;
//实例化预置
enemyDragons2[i]=(游戏对象)实例化(enemyDragonStandIn,
PlaceToSpawn-矢量3.forward*20.4f,四元数。标识);
//附加脚本
enemyDragons2[i].AddComponent();
//找到敌人
GameObject your仇敌=GameObject.Find(“仇敌”);
//陷害敌人
enemyDragons2[i].GetComponent().敌方=你的敌人.transform;

您有一个变量,它是一种称为
敌方
的变换类型,您希望使用场景中名为“敌方”的游戏对象的变换来初始化该
敌方
变量

根据您的截图和评论,以下是您应该做的:

找到敌人

GameObject yourEnemy = GameObject.Find("Enemy");
在SeekChase脚本中设置敌人变量转换

enemyDragons2[i].GetComponent<SeekChase>().enemy = yourEnemy.transform;
enemyDragons2[i].GetComponent().敌方=你的敌方.transform;
对于其他代码,它应该类似于blow:

//Instantiate prefab
enemyDragons2[i] = (GameObject)Instantiate(enemyDragonStandIn,
PlaceToSpawn - Vector3.forward * 20.4f, Quaternion.identity);

//Attach script
enemyDragons2[i].AddComponent<SeekChase>();

//Find the Enemy
GameObject yourEnemy = GameObject.Find("Enemy");

//Set the enemy
enemyDragons2[i].GetComponent<SeekChase>().enemy = yourEnemy.transform;
//实例化预置
enemyDragons2[i]=(游戏对象)实例化(enemyDragonStandIn,
PlaceToSpawn-矢量3.forward*20.4f,四元数。标识);
//附加脚本
enemyDragons2[i].AddComponent();
//找到敌人
GameObject your仇敌=GameObject.Find(“仇敌”);
//陷害敌人
enemyDragons2[i].GetComponent().敌方=你的敌人.transform;

AddComponent返回添加的组件。此时,您可以访问其所有公共成员。如果不想为该转换公开setter,可以在EnemyDragon类中放置一个工厂方法,该方法可以访问EnemyDragon的所有公共/受保护/私有成员。“但我的SeekChase脚本需要一个转换,我通常会将其拖到检查器中。”这很难理解。张贴
SeekChase
脚本,并解释您在该语句中的意思。如果需要的话,可以在编辑器图片中添加一个屏幕截图,说明你现在是如何做的。你想在SeekChase脚本中添加什么转换?当我得到回复时,我会用哈里斯的回答来解决你的问题。转换是我放入插槽中的任何对象/预设。这是正在追逐的东西。所有的工作都到此为止。但是我不想在inspector中手动设置对象/预制,而是通过脚本/代码,就像我上面的原始问题一样。返回添加的组件。此时,您可以访问其所有公共成员。如果不想为该转换公开setter,可以在EnemyDragon类中放置一个工厂方法,该方法可以访问EnemyDragon的所有公共/受保护/私有成员。“但我的SeekChase脚本需要一个转换,我通常会将其拖到检查器中。”这很难理解。张贴
SeekChase
脚本,并解释您在该语句中的意思。如果需要的话,可以在编辑器图片中添加一个屏幕截图,说明你现在是如何做的。你想在SeekChase脚本中添加什么转换?当我得到回复时,我会用哈里斯的回答来解决你的问题。转换是我放入插槽中的任何对象/预设。这是正在追逐的东西。所有的工作都到此为止。但是我不想在inspector中手动设置对象/预制,而是通过脚本/代码,就像我上面的原始问题一样。谢谢你的回复。你的答案的C版本是什么?我已经搜索解决方案好几天了,所以请在示例代码中详细说明。ThanksIm目前正在我手机上的飞机上。这对你不管用吗?你犯了什么错误?我还没有试过代码,但我只是想让C版本更清晰,因为这是我正在使用的,而且我更清楚。但是如果你在飞机上,我现在不想麻烦你。我的答案是C#,尽管有一些变量声明缺失,我使用了
来代替实际的赋值。这只是伪代码,但如果我正确理解了你的问题,它应该会根据你的特定用例进行一些调整。我只是说我现在没有访问IDE的权限。您好,谢谢您的回复。你的答案的C版本是什么?我已经搜索解决方案好几天了,所以请在示例代码中详细说明。ThanksIm目前正在我手机上的飞机上。这对你不管用吗?你犯了什么错误?我还没试过密码,但是