为什么在创建新的 GameObjects 时它不更改标签?
Why when creating new GameObjects it's not changing the tag?
在第一个脚本中:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class InstantiateObjects : MonoBehaviour
{
public GameObject prefab;
public Terrain terrain;
public float yOffset = 0.5f;
private float terrainWidth;
private float terrainLength;
private float xTerrainPos;
private float zTerrainPos;
void Start()
{
//Get terrain size
terrainWidth = terrain.terrainData.size.x;
terrainLength = terrain.terrainData.size.z;
//Get terrain position
xTerrainPos = terrain.transform.position.x;
zTerrainPos = terrain.transform.position.z;
//generateObjectOnTerrain();
}
public void generateObjectOnTerrain(bool parent, string tag)
{
//Generate random x,z,y position on the terrain
float randX = UnityEngine.Random.Range(xTerrainPos, xTerrainPos + terrainWidth);
float randZ = UnityEngine.Random.Range(zTerrainPos, zTerrainPos + terrainLength);
float yVal = Terrain.activeTerrain.SampleHeight(new Vector3(randX, 0, randZ));
//Apply Offset if needed
yVal = yVal + yOffset;
//Generate the Prefab on the generated position
GameObject objInstance = Instantiate(prefab, new Vector3(randX, yVal, randZ), Quaternion.identity);
if (parent)
objInstance.transform.parent = this.transform;
objInstance.transform.tag = tag;
}
}
在我使用的脚本中:
private void Start()
{
for (int i = 0; i < cloneTeleportations; i++)
{
InstantiateObjects gos = GetComponent<InstantiateObjects>();
gos.prefab = prefab;
gos.generateObjectOnTerrain(true, "ddd");//"Teleportation");
}
}
如果我将其从 true 更改为 false,它将不会生成 GameObjects 子项,如果是 true,它们将是子项。父部分正在工作。
但是为了测试,我尝试将标签更改为 "ddd",我在第一个脚本中看到标签是 "ddd":
objInstance.transform.tag = tag;
标签是 "ddd" 并且 objInstance.transform.tag 默认是 "Teleportation" 当 运行 游戏中所有克隆的游戏对象都被标记为 "Teleportation" 而不是 "ddd".
在 Unity
中,您必须先从编辑器中手动添加 tag
,然后才能将其分配给 GameObject
。如果 tag
不存在,则无法分配它。
在第一个脚本中:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class InstantiateObjects : MonoBehaviour
{
public GameObject prefab;
public Terrain terrain;
public float yOffset = 0.5f;
private float terrainWidth;
private float terrainLength;
private float xTerrainPos;
private float zTerrainPos;
void Start()
{
//Get terrain size
terrainWidth = terrain.terrainData.size.x;
terrainLength = terrain.terrainData.size.z;
//Get terrain position
xTerrainPos = terrain.transform.position.x;
zTerrainPos = terrain.transform.position.z;
//generateObjectOnTerrain();
}
public void generateObjectOnTerrain(bool parent, string tag)
{
//Generate random x,z,y position on the terrain
float randX = UnityEngine.Random.Range(xTerrainPos, xTerrainPos + terrainWidth);
float randZ = UnityEngine.Random.Range(zTerrainPos, zTerrainPos + terrainLength);
float yVal = Terrain.activeTerrain.SampleHeight(new Vector3(randX, 0, randZ));
//Apply Offset if needed
yVal = yVal + yOffset;
//Generate the Prefab on the generated position
GameObject objInstance = Instantiate(prefab, new Vector3(randX, yVal, randZ), Quaternion.identity);
if (parent)
objInstance.transform.parent = this.transform;
objInstance.transform.tag = tag;
}
}
在我使用的脚本中:
private void Start()
{
for (int i = 0; i < cloneTeleportations; i++)
{
InstantiateObjects gos = GetComponent<InstantiateObjects>();
gos.prefab = prefab;
gos.generateObjectOnTerrain(true, "ddd");//"Teleportation");
}
}
如果我将其从 true 更改为 false,它将不会生成 GameObjects 子项,如果是 true,它们将是子项。父部分正在工作。 但是为了测试,我尝试将标签更改为 "ddd",我在第一个脚本中看到标签是 "ddd":
objInstance.transform.tag = tag;
标签是 "ddd" 并且 objInstance.transform.tag 默认是 "Teleportation" 当 运行 游戏中所有克隆的游戏对象都被标记为 "Teleportation" 而不是 "ddd".
在 Unity
中,您必须先从编辑器中手动添加 tag
,然后才能将其分配给 GameObject
。如果 tag
不存在,则无法分配它。