Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Unity3d-GetComponentChild在C中传递数据_C#_Unity3d - Fatal编程技术网

C# Unity3d-GetComponentChild在C中传递数据

C# Unity3d-GetComponentChild在C中传递数据,c#,unity3d,C#,Unity3d,我对Unity3D和C相当陌生,所以我不完全确定在下面的场景中我做错了什么 在Unity3D中,我试图获取一个可变目标的值,当玩家移动到离敌人足够近的地方,脚本会将目标从空变为“敌人”,并获取位置,依此类推 炮塔上有一个用于自动瞄准的脚本,它是主要玩家游戏对象的子对象 每当我使用以下内容时: targettingScript target; target = gameObject.GetComponent<targettingScript>(); // or--- target =

我对Unity3D和C相当陌生,所以我不完全确定在下面的场景中我做错了什么

在Unity3D中,我试图获取一个可变目标的值,当玩家移动到离敌人足够近的地方,脚本会将目标从空变为“敌人”,并获取位置,依此类推

炮塔上有一个用于自动瞄准的脚本,它是主要玩家游戏对象的子对象

每当我使用以下内容时:

targettingScript target;

target = gameObject.GetComponent<targettingScript>();
// or---
target = gameObject.GetComponentInChildren<targettingScript>();
…然后,我可以使用debug.log测试它在启动时是否会像应该的那样拉空,但当炮塔找到目标并将目标从空更改为空时,它似乎不会更新

我在论坛上读到过一些帖子,其中一些人说你不能这样做,将数据从一个子组件脚本传递到另一个被实例化的游戏对象,即在目标确定完成后发射一枚导弹,然后进行寻的导弹式的跟踪,还有一些人说他们检查了游戏对象的所有级别,直到他们找到了他们想要的,但我不明白这到底意味着什么

我的问题是,1-是否可以将一个变量从一个子游戏对象的组件传递到另一个实例化的游戏对象 2-如果是,如何进行

如果这是一个相当简单的概念,我很抱歉,但我不知道如何排除故障。 我将建立一个新的场景,尝试各种游戏对象和子对象,看看我能收集到什么,如果我发现任何有用的东西,我会发布在这里

同时,感谢大家花时间回顾我的问题。

当然

由于您实例化了对象运行时,因此应该跟踪它

public GameObject target;

public void Update() {
   // if we dont have a target (find it).
   if(target == null) {
      target = GameObject.Find("Player");
   }

   // if we found the target take some health each frame.
   if(target != null) {
      playerhealth = player.GetComponent<PlayerHealth>();
      playerhealth.health--;
   }
}
当然,您也可以在查找中添加距离检测器

if(target != null)
if(Vector3.distance(transform.position, target.transform.position) < 5) {
   // target in range
} else {
   // to far away ignore it.
   target = null;
}
当你在运行时实例化游戏对象时,最好的做法是,如果你以后要引用它们,你必须跟踪它们,因此创建一个管理器来执行此操作,创建一个空的游戏对象,向其中添加一个脚本,并让其他对象将其称为MgrScript.spawnedy,这样我们就可以从数组或类似的东西中引用敌人的


如果你不使用管理器,而你的场景又简单又小,你可以使用标签来引用游戏对象,因为当你有一个大而复杂的场景时,按名称引用是个坏主意,因为您很可能引用了错误的项目。

Unity editor的“层次”窗格中游戏对象的层次结构如何?现在有点混乱,因为我只是尝试建立一些基本的机制,同时学习Unity。我的玩家是一个空的游戏对象,有一个基本的“外壳”。小时候,炮塔就在炮塔下面,炮塔上的瞄准片和射击硬点都是孩子,并且在炮塔游戏对象下面有不同的分支。我最终使用了findgameobjectwithtag,我似乎有了正确的变量,刚才让导弹跟踪它是下一个有趣的部分。谢谢,这引导了我正确的方向。我本来甚至都没有走上正轨。最后,我做了更多的研究,并考虑了您在上面提到的关于经理的内容。我遇到了一个教程,在他们的管理器中使用FindGameObjectWithTag并阅读文档,这样我就得到了想要的变量。现在我只需要找到游戏物体的位置,让我的导弹飞到它后面!哈哈,谢谢。