C# 向多个项目动态添加标记

C# 向多个项目动态添加标记,c#,unity3d,tags,C#,Unity3d,Tags,我在动态添加标记到gameObejcts时遇到问题,当我实例化敌人时,我使用以下方法添加敌人标记: GameObject temp = (GameObject)Instantiate(enemy, spwanPosition, spwanRotation); temp.gameObject.tag = "Enemy"; Instantiate(enemy, spwanPosition, spwanRotation); enemy.tag = "Enemy"; 我从以下地方读到: 但是当我试图

我在动态添加
标记
gameObejcts
时遇到问题,当我
实例化
敌人
时,我使用以下方法添加敌人标记:

GameObject temp = (GameObject)Instantiate(enemy, spwanPosition, spwanRotation);
temp.gameObject.tag = "Enemy";
Instantiate(enemy, spwanPosition, spwanRotation);
enemy.tag = "Enemy";
我从以下地方读到:

但是当我试图用特定的
爆炸摧毁这个物体时
没有带有
敌人
标签的物体:

void OnTriggerEnter(Collider other)
{
    if (other.tag == "Boundary")
    {
        return;
    }
    if (other.tag == "Enemy")
    {
        Debug.Log("enemy");   # Never printed in console
        Instantiate(enemyExplosion, other.transform.position, other.transform.rotation);
    }
    Instantiate(explosion, this.transform.position, this.transform.rotation);
    Destroy(other.gameObject);
    Destroy(this.gameObject);
如何将标签动态添加到
多次实例化的
游戏对象

编辑

这是暂停游戏中实例化的敌人对象的图片,它是如此有线,它有
敌人标签
,但为什么这不起作用


问题是当在运行时
敌方
标记被分配给对象时,但当我检查
是否(other.tag==“敌方”)
这不起作用时

您发布的链接是关于动态创建标记的,您不需要这样做,我也不明白为什么有人需要这样做

我想你在标签管理器中有一个名为“敌人”的标签吧

您正在实例化一个敌方预制件,这意味着您不需要
敌方.tag=“敌方”
。只需在检查器中将敌人预制标签设置为敌人

这将使用与预置相同的值实例化新敌人

至于触发器不工作,我不确定,请确保您已满足敌人调用OnTriggerEnter()的所有规格

取自

对于触发器,其中至少一个必须检查Is触发器属性,并且其中至少一个必须具有刚体。如果两个对象都不是触发器,则可以改用OnCollisionCenter

设置完毕后,应检查对象上的图层(而不是标记)。要编辑哪些层相互碰撞,可以查看编辑->项目设置->物理

我从中读到:是否可以通过编程方式创建标记

不可能在运行时创建标记。您可以将游戏对象的标签更改为现有的标签,但无法创建新的标签

因此分配一个名为
敌方
边界
的标签之前,首先确保您已经在编辑器中创建了这样的标签。它也区分大小写

我在向gameObejcts添加动态标记时遇到问题 实例化一个敌人,我使用以下方法添加敌人标签:

GameObject temp = (GameObject)Instantiate(enemy, spwanPosition, spwanRotation);
temp.gameObject.tag = "Enemy";
Instantiate(enemy, spwanPosition, spwanRotation);
enemy.tag = "Enemy";
如何将标签动态添加到实例化的游戏对象 多次

那是错误的。您现在所做的是更改原始游戏对象的标记,而不是实例化的游戏对象。要更改实例化的游戏对象的标记,请存储实例化的游戏对象的引用,然后修改标记。下面的代码就是您要查找的代码

GameObject tempGOB= (GameObject)Instantiate(enemy, spwanPosition, spwanRotation);
tempGOB.tag = "Enemy"; //Change the tag of the Instantiated GameObject instead of the enemy(original object)

我怀疑你的问题不是标签,而是碰撞。你的敌人有对撞机吗?一个简单的碰撞测试成功了吗

编辑(忘记这一点):


实际上,您的问题可能是不应该使用
other.tag
,而应该使用
other.gameObject.tag

。实例化一个游戏对象,选择场景中的游戏对象,然后发布屏幕截图。添加图片,真奇怪!从你上传的图片来看,它是有效的。它将标签改为“敌人”。仔细看它说的标记,它成功地将标记设置为敌人。这不是你想做的吗?我很困惑。你说实例化的对象没有标签,但你说它有标签…?标签说敌人。名字上写着敌人(克隆人)。图层显示默认值。根据你的期望,哪一个是错误的?@fafase,我
实例化了他们中的很多人,他自己给他们命名为克隆人,我不知道id是什么Layer@Arman,改变你的问题不是一件好事。问题是关于重命名一个标签,我提供了一个如何正确更改的解决方案。你说它不起作用,但是你继续用我的代码替换了原来的代码。我让你上传的照片证明标签已经改成了敌人。当你原来的问题得到回答时,你接受了它,如果你有不同的问题,你会问一个新问题。看起来您现在遇到了碰撞问题。不要改变你的问题!问另一个。如果你想显示你的新代码,你可以将新代码放入编辑中,但不要替换原来的代码。我原以为
other.tag
other.gameObject.tag
相同。只有一个游戏对象的标签,而不是碰撞器。是的,我看过了,它是一样的。
Other.gameobject.tag
is也不起作用!敌人有一个
Collison网格
@Arman你在inspector中将你的网格碰撞器标记为
IsConvex
IsTrigger
了吗?网格碰撞器只检测标记为凸面的碰撞。是的,我检测到了,它的istrigger和isconvex