c# - 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;
}
}
解决方案
你应该能够做到这一点,问题可能在你项目的其他地方。我创建了一个示例项目,它重新创建了您正在尝试做的事情,试图与您发送的示例代码尽可能相似,您可以在此处找到它:
https://github.com/webocs/unity-so-sample-tags
据我所知,您的控制台正在发送异常
get_main is not allowed to be called...
我想到的是,那个异常正在破坏整个执行,这就是为什么什么都没有发生。
作为旁注,我不知道你的项目,所以我真的不知道你为什么要这样构建它。说了这么多,你为什么不创建一个附加到敌人预制件的敌人脚本?如果您有很多敌人,您将在每个更新 tic 中找到并遍历所有敌人。如果您创建一个 Enemy 脚本并将其附加到预制件上,您应该能够使用脚本附加到的游戏对象的变换来处理敌人的移动。这样每个敌人都是一个独立的实体。
我希望所有这些都有帮助!
编辑: 我编辑了 repo 并添加了一个名为“IndividualEnemies”的场景,它说明了我在评论中告诉你的内容
推荐阅读
- android - 在 Android 10 设备中,生物识别提示一直在锁定屏幕顶部失败并显示 ERROR_CANCELED
- javascript - 在 Javascript 和 PHP 之间匹配 MD5 原始输出
- java - 在android中更改wifi时如何获取连接的wifi ssid
- flutter - 颤振网页视图
- c# - 在 .Net Core 2.2 Web API 项目中处理中间件中的 SignalR 异常
- php - 将多维数组转换为单个数组
- python - 内存错误:根据来自另一个数据帧的多列条件创建多列
- mysql - 我们可以在 mysql 数据库中以什么数据类型保存指纹数据?
- python - 在python中循环以下方式
- ember.js - 如何禁用某些列 Ember js 中的复选框?