【问题标题】:Get Prefab in the script of an Instantiated Object - Unity 2D在实例化对象的脚本中获取 Prefab - Unity 2D
【发布时间】:2021-08-17 21:34:29
【问题描述】:

我正在制作一款太空侵略者游戏,并且有一个脚本附加到一个单独的游戏对象上,该游戏对象实例化了 Enemies。我可以拖入预制件并使其工作,但我希望敌人自己产生子弹,子弹是预制件。

我刚开始只是为子弹创建一个变量,但是我如何在脚本中访问预制件,就像我只是将它拖到预制件中一样,在预制件实例化后它将无法使用。

GameObject bullet;

void Start() {
    bullet = // Insert Function to access prefab
}

谢谢

【问题讨论】:

    标签: unity3d


    【解决方案1】:

    如果您将预制件放在名为“Resources”的根文件夹中,您可以像这样从那里加载预制件:

    Instantiate(Resources.Load("YourBulletPrefab"));
    

    但您也可以将变量设为公开...

    public GameObject bullet; // or use private + [SerializeField]
    

    ...然后在 Inspector 中,将您的 Prefab 拖入。在这种情况下,无需在 Start() 中初始化它。

    【讨论】:

    • 那么如果我在 Assets 文件夹中有一个名为“Prefabs”的文件夹,我可以这样做,还是需要将它拖出 assets 文件夹?
    • 第一种方法必须是Assets/Resources。你也可以试试Assets/Resources/Prefabs,然后用Resources.Load("Prefabs/YourBulletPrefab");
    【解决方案2】:

    我通常通过在“enemy”脚本和“enemy spawner”脚本中添加一个public GameObject bullet 变量来解决这个问题。在检查器中,您可以参考“敌人生成器”来访问子弹预制件。然后,当你生成一个敌人时,你将它的引用传递给敌人。像这样的:

    敌人脚本:

    class Enemy
    {
       public GameObject bullet;
    
       private Shoot()
       {
           //Shoot bullet
       }    
    }
    

    EnemySpawner 脚本:

    class EnemySpawner
    {
       public GameObject enemy;
       public GameObject bullet;
    
       private Spawn()
       {
           GameObject newEnemy = Instantiate(enemy);
           enemy.GetComponent<Enemy>().bullet = bullet;
       }    
    }
    

    这样做,您以后也可以访问项目符号。

    【讨论】:

    • 谢谢,这也有帮助 :) 虽然(对我来说)有点晚了,因为我刚刚检查了
    • 乐于助人! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多