首页 > 解决方案 > GameObject.FindGameObjectWithTag 未检测到克隆对象

问题描述

我有一个脚本,可以根据它们的标签移动实例化的游戏对象。但是,已实例化的游戏对象并没有移动。


实例化脚本:

void Update()

{
    tillNextSpawn += Time.deltaTime;
    Debug.Log(tillNextSpawn);

    if (tillNextSpawn >= 2)
    {
        UnityEngine.Debug.Log("Instantiating circle");
        screenPosition = Camera.main.ScreenToWorldPoint(new Vector3(Random.Range(0, Screen.width), Random.Range(0, Screen.height), Camera.main.farClipPlane / 2));
        Instantiate(circle, screenPosition, Quaternion.identity);
        tillNextSpawn = 0.0f;
    }
}

敌人控制器脚本(移动敌人)

void FixedUpdate()
{
    /*GameObject[]*/
    var objects = GameObject.FindGameObjectsWithTag("Enemy");
    var objectCount = objects.Length;
    foreach (var obj in objects)
    {
        // Move the players accordingly
        var rb = obj.GetComponent<Rigidbody2D>();
        Debug.Log(rb);
        Vector2 direction = (player.position - obj.transform.position).normalized;
        rb.velocity = direction * moveSpeed;
    }


}

标签: c#unity3d

解决方案


你应该能够做到这一点,问题可能在你项目的其他地方。我创建了一个示例项目,它重新创建了您正在尝试做的事情,试图与您发送的示例代码尽可能相似,您可以在此处找到它:

https://github.com/webocs/unity-so-sample-tags

据我所知,您的控制台正在发送异常

get_main is not allowed to be called...

我想到的是,那个异常正在破坏整个执行,这就是为什么什么都没有发生。

作为旁注,我不知道你的项目,所以我真的不知道你为什么要这样构建它。说了这么多,你为什么不创建一个附加到敌人预制件的敌人脚本?如果您有很多敌人,您将在每个更新 tic 中找到并遍历所有敌人。如果您创建一个 Enemy 脚本并将其附加到预制件上,您应该能够使用脚本附加到的游戏对象的变换来处理敌人的移动。这样每个敌人都是一个独立的实体。

我希望所有这些都有帮助!

编辑: 我编辑了 repo 并添加了一个名为“IndividualEnemies”的场景,它说明了我在评论中告诉你的内容


推荐阅读