【问题标题】:Why when creating new GameObjects it's not changing the tag? [duplicate]为什么在创建新游戏对象时不会更改标签? [复制]
【发布时间】:2017-05-16 06:37:32
【问题描述】:

在第一个脚本中:

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;

tag 是“ddd”,objInstance.transform.tag 在运行游戏时默认是“Teleportation”,所有克隆的游戏对象都被标记为“Teleportation”而不是“ddd”。

【问题讨论】:

  • 你在 Unity 中创建了标签ddd 吗?
  • 啊,对了,忘记了。

标签: c# unity3d unity5


【解决方案1】:

Unity 中,您必须首先从编辑器手动添加tag,然后才能将其分配给GameObject。如果tag 不存在,则无法分配它。

【讨论】:

  • @Programmer SerializedProperty tagsProp = tagManager.FindProperty("tags"); string s = "the_tag_i_want_to_add"; 可以通过c# 脚​​本添加标签。我不明白你为什么编辑我的问题请解释一下。 :)
  • 不能从脚本添加/创建标签。您只能从脚本中更改标签。
  • 我不同意,请您参考this 文章并确认它已过时。谢谢。
  • 这是编辑器脚本。您几乎可以通过反射或 Unity 的编辑器 API 在编辑器中执行任何操作。 OP 未处理编辑器脚本。当他构建游戏时,这将失败。
  • @Programmer 更正了我的答案:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-26
  • 1970-01-01
  • 1970-01-01
  • 2021-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多