代码之家  ›  专栏  ›  技术社区  ›  zyonneo

如何检查/查找变换下的游戏对象是隐藏的还是活动的?

  •  0
  • zyonneo  · 技术社区  · 7 年前

    我正在使用Gameobject.find。单击此处。当我单击一个按钮时,相应的模型出现,而场景中的其他模型消失。此时Gameobject.find将不起作用,因为其他模型已隐藏。任何更好的解决方案。请查看下面的代码太多,如果有的话。:)

    private string _assetname;
    
    public void LoadAsstBundles(int choice)
    {
        if (choice == 1)
        {
            _assetname = “Chair1”;
        }
        else if (choice == 2)
        {
            _assetname = “Chair2”;
        }
        else if (choice == 3)
        {
            _assetname = “Chair3”;
    
        }
    
    
        if (_assetsBundle == null)
        {
            Debug.Log("Could Not load AssetBundles");
        }
        else
        {
    
    
            if (GameObject.Find(_assetname + "(Clone)"))
            {
                Debug.Log("Already Loaded");
            }
    
            else
            {
    
                var asset = _assetsBundle.LoadAsset(_assetname);
    
                int childcounts = ParentTransform.childCount;
    
                Debug.Log("Asset name nw ==" + asset.name);
    
    
                Debug.Log("Asset Bundles Loaded");
    
                var go = (GameObject)Instantiate(asset, ParentTransform);
    
                int option = go.transform.GetSiblingIndex();
    
    
                int childcount = ParentTransform.childCount;
    
                for (int i = 0; i < childcount; i++)
                {
    
                    if (option == i)
                    {
                        ParentTransform.GetChild(i).gameObject.SetActive(true);
                        continue;
                    }
                    ParentTransform.GetChild(i).gameObject.SetActive(false);
    
                }
    
            }
    
        }
    
    }
    
    2 回复  |  直到 7 年前
        1
  •  2
  •   derHugo    7 年前

    而不是使用 Find 更确切地说,使用变量时,存储实例化对象时获得的引用,并在以后重用它们。

    // Here you store the reference from
    // Assetbundle.LoadAsset
    private object loadedAsset; 
    
    // Here you store the reference to the assets instance itself
    private GameObject assetInstance;
    
    public void LoadAsstBundles(int choice)
    {
        // Is _assetBundle available?
        if (!_assetsBundle)
        {
            Debug.Log("Could Not load AssetBundles", this);
            return;
        }  
    
        // Was the bundle loaded before?
        if (!loadedAsset)
        {
            loadedAsset = _assetsBundle.LoadAsset(_assetname);
    
            if(!loadedAsset)
            {
                Debug.LogError("unable to load asset", this);
                return;
            }
    
            Debug.Log("Asset Bundles Loaded", this);
        }
    
        // Is the object Instantiated in the scene?
        if(!assetInstance)
        {
            assetInstance = (GameObject)Instantiate(loadedAsset, ParentTransform);
            Debug.LogFormat(this, "Instantiated {0}", assetInstance.name);
        }
    
        // no need to go by names
        // simply get the correct child by index
        var selected = assetInstance.transform.GetChild(choice);
    
        // Enable or disable the childs
        // simply run through all childs no need to get their names etc
        foreach(Transform chair in assetInstance.transform)
        {
            chair.gameObject.SetActive(chair == selected);
        }
    }
    
        2
  •  0
  •   zyonneo    7 年前

    public void LoadAsstBundles(int choice)
            {
                if(choice==1)
                {
                    _assetname = "Chair1";
                }
                else if(choice == 2)
                {
                    _assetname = "Chair2";
                }
                else if(choice == 3)
                {
                    _assetname = "Chair3";
    
                }
    
        if (_assetsBundle==null)
        {
            Debug.Log("Could Not load AssetBundles");
        }
        else
        {
    
           var asset= _assetsBundle.LoadAsset(_assetname);
    
            //if (GameObject.Find(_assetname + "(Clone)"))
            //{
            //    Debug.Log("Already Loaded");
            //}
    
    
            if(ParentTransform.Find(_assetname+ "(Clone)")== true)
            {
                Debug.Log("Already Loaded");
    
                int childcount = ParentTransform.childCount;
                for (int i = 0; i < childcount; i++)
                {
    
                    if (choice == i)
                    {
                        ParentTransform.GetChild(i).gameObject.SetActive(true);
                        continue;
                    }
                    ParentTransform.GetChild(i).gameObject.SetActive(false);
    
                }
    
    
            }
    
            else
            {
    
    
                Debug.Log("Asset Bundles Loaded");
    
                var go = (GameObject)Instantiate(asset, ParentTransform);
    
                int option = go.transform.GetSiblingIndex();
                _loadednames.Add(go.name);
    
    
    
    
                Debug.Log("Sibling index == " + go.transform.GetSiblingIndex());
    
                int childcount = ParentTransform.childCount;
    
                for (int i = 0; i < childcount; i++)
                {
    
                    if (option == i)
                    {
                        ParentTransform.GetChild(i).gameObject.SetActive(true);
                        continue;
                    }
                    ParentTransform.GetChild(i).gameObject.SetActive(false);
    
                }
    
    
            }
    
        }
    
    }
    
    推荐文章