【问题标题】:How to get GameObjects with different tags in the same Array | Unity3D如何在同一个数组中获取具有不同标签的游戏​​对象 | Unity3D
【发布时间】:2019-09-30 17:43:09
【问题描述】:

我有 2 个游戏对象: 1.) 螺丝(带有 2 个带有附加脚本的空子对象以生成不同的预制类型的螺丝) 2.) 盘子

对于板对象,我分配了一个脚本,该脚本获取特定标签并将这些带有该标签的对象放入一个数组中。 但是,我添加了一种方法,将 2 种不同类型的标签放入一个列表中,然后放入一个数组(螺丝)中,如下所示。

螺丝的实例化发生在另一个脚本 Awake() 方法中。两种螺丝都生成 x20,所以总共有 40 个。

尝试使用一个标签获取所有对象工作正常。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Linq;

public class ScrewHandler : MonoBehaviour
{
    /*------------- Declaration of vars etc. -------------*/

    public GameObject[] Screws;

    /*----------------- Create Array --------------------------*/
    private void Start()
    {
        Debug.Log("Start called");

        Screws = FindGameObjectsWithTags(new string[] {"ScrewA","ScrewB"});

        // custom method to get multiple types of tags into one array
        GameObject[] FindGameObjectsWithTags(params string[] tags)
        {
            var all = new List<GameObject>();

            foreach(string tag in tags)
            {
                var temp = GameObject.FindGameObjectsWithTag(tag).ToList();
            }
            return all.ToArray();
        }

    }

}

如果一切顺利,我应该能够在脚本检查器中看到包含所有对象的数组。

【问题讨论】:

    标签: c# arrays unity3d


    【解决方案1】:

    您的自定义 FindGameObjectsWithTags 方法将在您每次运行时返回一个空数组。

    问题是,您永远不会向变量 all 添加任何元素,因此转换为数组也会导致空数组。

    我会建议你这样做:

    GameObject[] FindGameObjectsWithTags(params string[] tags)
    {
        var all = new List<GameObject>();
    
        foreach (string tag in tags)
        {
            all.AddRange(GameObject.FindGameObjectsWithTag(tag).ToList());
        }
    
        return all.ToArray();
    }
    

    已编辑:错字

    【讨论】:

    • 坦克!在成功地改变这条线之后,事情正在解决。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2017-12-30
    • 2021-02-16
    • 1970-01-01
    相关资源
    最近更新 更多