我向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
,但为什么这不起作用?
问题是在运行时Enemy
标记分配给对象时,但是当我检查if(other.tag == "Enemy")
时这不起作用!
答案 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)
我从以下处读到:是否可以通过编程方式创建标签
不可以在运行时创建标记。您可以将游戏对象的标记更改为现有,但不能创建新。
之前 指定一个名为Enemy
或Boundary
的标记,请确保您已在中创建了此类标记编辑首先。它也区分大小写。
我遇到向gameObejcts添加动态标签的问题,当我 实例化敌人我使用这个添加敌人标记:
Instantiate(enemy, spwanPosition, spwanRotation); enemy.tag = "Enemy";
如何动态地将标签添加到实例化的游戏对象中 多次?
那是错的。您现在正在做的是更改 原始 GameObject NOT 实例化 GameObject 的标记。要更改 实例化 GameObject的标记,商店 实例化的引用GameObject然后修改 标记。以下代码是您正在寻找的。 p>
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
。