Есть вот такой скрипт:
public class SpwnEffect : MonoBehaviour
{
public GameObject SpwnEff;
void Start ()
{
SpwnEff.SetActive(false);
}
void Update ()
{
if (transform.position.y < -20)
{
SpwnEff.SetActive(true);
StartCoroutine(DisableSpwnEff(2.0f));
}
}
IEnumerator DisableSpwnEff(float sec)
{
yield return new WaitForSeconds(sec);
SpwnEff.SetActive(false);
}
}
Но условия изменились и "SpwnEff" больше не публичный объект, а назначаемый другим скриптом. И теперь их много и с разными именами. Теперь этот объект дочерний.
Нужно в скрипте, который "повиснет" на "родителе" обратится к дочерним объектам - на старте - отключить их. Затем при условии transform.position.y < -20
- включить - и через секунду - опять отключить. Этот процесс должен быть повторяемым. Речь идёт о персонаже, на котором висит префаб - эффект вспышки. Когда персонаж появляется на сцене - префаб отключён - когда проваливается вниз, до отметки -20 - префаб должен включаться (другой скрипт возвращает персонажа на чек-поинт и по задумке, должна произойти вспышка), а затем, через пару секунд, префаб надо отключить - что б, при следующем падении он опять сработал.
Чтобы получить список "детей" данного объекта, можно использовать такой подход:
foreach(Transform child in transform) {
// итерируемся по всем детям
// для получения именно объекта ребенка - используем child.gameObject
}
Чтобы выключить/включить всех детей, проще написать метод, используя код выше:
void SetChildrenActiveState(bool active) {
foreach(Transform child in transform) {
child.gameObject.SetActive(active);
}
}
Также надо понимать, что условие if (transform.position.y < -20)
будет каждый кадр возвращать true после преодоления объектом высоты в -20f. Поэтому желательно завести какой-нибудь флаг, если же таких "состояний" больше 2, то лучше завести конечный автомат, но это уже совсем другая история.
Ну и наконец, финальный код:
public class ChildrenActivator : MonoBehaviour {
bool ready = true;
void Start() {
SetChildrenActiveState(false);
}
void Update() {
if (ready && transform.position.y <= -20f) {
StartCoroutine(DisableSpwnEff(1.0f));
}
}
IEnumerator DisableSpwnEff(float sec) {
ready = false;
SetChildrenActiveState(true);
yield return new WaitForSeconds(sec);
ready = true;
SetChildrenActiveState(false);
}
void SetChildrenActiveState(bool active) {
foreach(Transform child in transform) {
child.gameObject.SetActive(active);
}
}
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть ли возможность отловить момент воспроизведения определённого звука на компьютера?
Всем доброго дня! Хочу использовать SQLite в своем проекте, защитив ее паролемВ гугле нашел такие решения:
Мне нужно синхронизировать Progressbar в Windows Forms с командой sfc /scannowЭта команда отвечает за проверку системный файлов и идёт в процентах