动态统一添加标签到多个项目

时间:2016-03-20 16:17:12

标签: c# unity3d tags

我向tag添加动态gameObejcts时遇到问题,当我Instantiate enemy时,我使用此添加敌人标记:

GameObject temp = (GameObject)Instantiate(enemy, spwanPosition, spwanRotation);
temp.gameObject.tag = "Enemy";

我从以下网址阅读:Is it possible create a tag programmatically

但当我尝试使用特定explosion销毁此对象时没有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);

如何将标签动态添加到gameObject多次Instantiate

修改

这是Paused游戏中来自实例化敌人对象的图片,它是如此有线,它有Enemy tag,但为什么这不起作用?

enter image description here

问题是在运行时Enemy标记分配给对象时,但是当我检查if(other.tag == "Enemy")时这不起作用!

3 个答案:

答案 0 :(得分:0)

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

我认为你在标签管理器中有一个名为Enemy的标签?

您正在实例化敌人预制件,这意味着您不需要<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.inkdrop</groupId> <artifactId>commons</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>Commons files</name> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.3.RELEASE</version> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <start-class>com.inkdrop.App</start-class> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId> spring-boot-starter-data-jpa </artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> <version>${spring-loaded.version}</version> </dependency> </dependencies> </plugin> </plugins> </build> </project> 。只需在检查员中将敌人预制标签设置为敌人。

这将使用与预制件相同的值来实例化新敌人。

至于触发器不起作用,我不确定,确保你已经满足了调用OnTriggerEnter()的敌人的所有规格。

取自http://answers.unity3d.com/questions/753481/ontriggerenter-not-working-tried-everything-c.html

  

OnTriggerEnter,其中至少有一个必须选中Is Trigger属性,并且其中至少有一个必须具有Rigid Body。如果您的对象都不是触发器,则可以改为使用OnCollisionEnter。

     

一旦完成设置,您应该检查对象上的图层(而不是标签)。要编辑哪些图层相互碰撞,您可以查看编辑 - &gt;项目设置 - &gt;物理。

答案 1 :(得分:0)

  

我从以下处读到:是否可以通过编程方式创建标签

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

之前 指定一个名为EnemyBoundary的标记,请确保您已在中创建了此类标记编辑首先。它也区分大小写

  

我遇到向gameObejcts添加动态标签的问题,当我   实例化敌人我使用这个添加敌人标记:

Instantiate(enemy, spwanPosition, spwanRotation);
enemy.tag = "Enemy";
     

如何动态地将标签添加到实例化的游戏对象中   多次?

那是错的。您现在正在做的是更改 原始 GameObject NOT 实例化 GameObject 的标记。要更改 实例化 GameObject的标记商店 实例化的引用GameObject然后修改 标记。以下代码是您正在寻找的。

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

答案 2 :(得分:-1)

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

编辑(忘掉这一点):

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