根据对象名称的层次来激活/停用游戏对象

时间:2019-02-25 11:05:09

标签: c# unity3d

在我的层次结构中,我有10个游戏对象,例如David,James,Lisa等。所有这10个游戏对象都是另一个游戏对象的子代。父游戏对象具有脚本组件,其中有一个列表,其中存储了10个孩子的名字。当然,此列表在游戏过程中会不断更新,因此有时并非所有孩子的名字都会被存储。例如,在游戏的某一时刻,该游戏中可能有7个名字。

在初始状态下,层次结构中的所有10个游戏对象均被停用。在Update()函数中,我要浏览列表,激活第一个游戏对象5秒钟,然后将其停用,然后转到下一个游戏对象并执行相同的操作。一遍又一遍。那可能吗?我的意思是,如何在C#中的列表和层次结构中的游戏对象之间设置链接?

2 个答案:

答案 0 :(得分:1)

如果仅存储游戏对象的名称,则需要使用public List<ProcessDTO> findByMetadata(Map<String, String> metadata) throws Exception { String key = "meta.mdWrap.xmlData.test.metadata."; BoolQueryBuilder query = new BoolQueryBuilder(); for (Map.Entry<String, String> entry : metadata.entrySet()) { query.must(matchQuery(key + "name", entry.getKey())); query.must(matchQuery(key + "content", entry.getValue())); } return findByQuery(query, true); } 来获取子游戏对象。

Transform.Find

答案 1 :(得分:1)

我必须问一个问题,为什么要使用名称而不仅仅是标准的单位属性?


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

public class ObjectCycler : MonoBehaviour {

  public float durationInSeconds = 5.0f;
  public GameObject[] objectsToCycle;

  int currentNdx = 0;

  void Start()
  {
    StartCoroutine(Cycle());
  }

  IEnumerator Cycle() 
  {
    for(;;) {
      objectsToCycle[currentNdx].SetActive(true);
      yield return new WaitForSeconds(durationInSeconds);
      objectsToCycle[currentNdx].SetActive(false);
      currentNdx = (currentNdx + 1) % objectsToCycle.Length;
    }
  }

}

将该脚本拖放到任何对象中。在检查器中,展开objectsToCycle属性,然后将size设置为要循环的对象数。将对象拖入其中。

运行

enter image description here

请注意,该顺序与检查器(ObjectCycler,gif上方)中的对象数组中的顺序匹配,而不与层次结构中的顺序匹配。您可以通过在检查器中更改顺序来设置所需的任何顺序。

宣传

  1. 更快

  2. 您可以轻松设置订单。

    Bill,Jill,Bob或Jill,Bill,Bob等

  3. 对象不必是子对象

  4. 对象可以重复

    比尔,鲍勃,比尔,鲍勃,吉尔,鲍勃等...

  5. 您可以重命名对象,并且不会损坏

  6. 您可以在层次结构中移动对象,并且不会中断