【问题标题】:How to add GameObjects positions in a transform list如何在变换列表中添加 GameObjects 位置
【发布时间】:2019-06-03 10:25:42
【问题描述】:

我是团结的初学者,希望有人可以在这里帮助我。我有一些带有标签BtnCharacter 的按钮,想要找到它们并将它们的位置添加到转换列表中。我猜可能是这样的:

public class Line : MonoBehaviour
{
public List<Transform> SaveList;
    void Start()
    {
        SaveList.Add(GameObject.FindGameObjectsWithTag("BtnCharacter").transform.position);
    }
}

但调试器显示:

错误 CS1061:“System.Array”不包含“transform”的定义,并且找不到接受“System.Array”类型的第一个参数的扩展方法“transform”(您是否缺少 using 指令或程序集参考?)(CS1061)(Assembly-CSharp)

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    GameObject.FindGameObjectsWithTag 方法获取所有带有给定标签的对象作为数组。您的 SaveListTransform 的列表,您正在尝试将数组添加到列表中。

    必须是这样的;

    Transform[] array = GameObject.FindGameObjectsWithTag("BtnCharacter");
    foreach(var item in array)
    {
       SaveList.Add(item.transform);
    }
    

    【讨论】:

    • 感谢您的回答。我试过这段代码,但显示新错误。
    • (23,23):错误 CS0029:无法将类型“UnityEngine.GameObject[]”隐式转换为“UnityEngine.Transform[]”(CS0029)(Assembly-CSharp)
    • GameObject[] array = FindObjectsWithTag("BtnCharacter"); 而不是在 foreach 中做 SaveList.Add(item.transform);
    • 来吧,伙计...它是FindGameObjectsWithTagGameObject.FindGameObjects 当然;)我只是快速发表评论,所以我没有写好:D
    • GameObject.FindGameObjectsWithTag()。该文档的存在是有原因的,@masihnamdar 和 Google 知道如何搜索它。
    【解决方案2】:

    首先你真的需要一个通用列表吗,我的意思是一个简单的数组也可以。无论哪种方式,这些解决方案都应该有所帮助 -

    1) 使用通用游戏对象列表

    public class Line : MonoBehaviour
    {
        public List<GameObject> SaveList;
        void Start()
        {
            SaveList = new List<GameObject>(GameObject.FindGameObjectsWithTag("BtnCharacter"));
        }
    }
    

    2) 使用通用 Transform/Vector3 列表:

    在第一种访问位置的方法中,您必须添加一个额外的.transform.position

    在这个解决方案中,您将能够创建一个通用的 Transform/Vector3 列表来存储变换/位置,如果您需要存储变换然后创建一个变换列表,否则创建一个 Vector3 列表这里是它的代码 -

    public class Line : MonoBehaviour
    {
        public List<Vector3> SaveList;//use List<Transform> to create transform list
        void Start()
        {
            SaveList = new List<Vector3>();
            GameObject[] objectsWithTag = GameObject.FindGameObjectsWithTag("BtnCharacter");
            foreach(GameObject GO in objectsWithTag){
                SaveList.Add(GO.transform.position);//use GO.transform to add the transform in the list
            }
        }
    }
    

    3)使用数组本身,我认为最简单

    public class Line : MonoBehaviour
    {
        public GameObject[] SaveArray;
        void Start()
        {
            SaveArray = GameObject.FindGameObjectsWithTag("BtnCharacter");
        }
    }
    

    在第三个解决方案中,如果您想存储 vector3 或转换数组,请尝试使用我在第二个解决方案中使用的方法,我也可以为它键入代码,但我希望您自己尝试以获得更好的理解。希望这个答案有帮助:)

    是的,文档存在,所以谷歌搜索或搜索或阅读文档真的会帮助你相信我:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-25
      • 2018-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-18
      • 2012-04-17
      • 1970-01-01
      相关资源
      最近更新 更多