#unity3d
Вопрос:
Я просто пытаюсь срубить дерево и возродить его. Я делаю это просто с помощью таймеров, чтобы сделать сборку дерева неактивной, а затем активной.
Дерево станет неактивным через 1 секунду (1-й таймер ожидания), а затем активным через 2 (второй таймер ожидания).
Однако, как ни странно, второй таймер ожидания, похоже, не работает, как показано в журналах ниже. Любая помощь была бы отличной.
Это мой скрипт ChopTree:
public class ChopTree : MonoBehaviour
{
private bool touching;
private void OnTriggerEnter(Collider other)
{
Debug.Log("Touching tree");
touching = true;
Debug.Log(touching);
}
private void OnTriggerExit(Collider other)
{
Debug.Log("Not Touching tree");
touching = false;
Debug.Log(touching);
}
private void Update()
{
if (Keyboard.current.enterKey.wasPressedThisFrame)
{
if (touching == true)
{
StartCoroutine(TreeSpawner.DeleteAndRespawn());
}
}
}
}
И это сценарий создания дерева:
public class TreeSpawner : MonoBehaviour
{
// Assign tree prefab.
[SerializeField]
private GameObject tree;
// Access-point for tree script.
private static TreeSpawner instance;
// Spawn the tree when the game Starts.
void Start()
{
instance = this;
}
IEnumerator Respawn(float timeToDespawn, float timeToRespawn)
{
yield return new WaitForSeconds(timeToDespawn);
Debug.Log("Deleting...");
tree.SetActive(false);
Debug.Log("Deleted...");
Debug.Log("Respawning...");
yield return new WaitForSeconds(timeToRespawn);
Debug.Log("Respawn Timer done...");
tree.SetActive(true);
Debug.Log("Respawned...");
}
public static IEnumerator DeleteAndRespawn()
{
Debug.Log("Deleting and respawning tree");
yield return instance.StartCoroutine(instance.Respawn(1f, 2f));
}
}
Вот порядок журналов:
Как вы можете видеть в журнале, чтобы сказать, что таймер возрождения завершен, никогда не происходит. Почему это?
Ответ №1:
Я предполагаю, что вы установили поле «дерево» в GameObject, куда вы поместили скрипт TreeSpawner. Когда игровой объект «дерево» деактивирован…
tree.SetActive(false);
… после этого скрипты TreeSpawner также останавливаются.
Комментарии:
1. Я могу неправильно понять ваши намерения, но я бы не стал использовать TreeSpawner как одноэлементный (статический). Я бы сохранил его как компонент и разместил на каждом дереве.