Я пытаюсь просто переключиться на другую камеру в течение 3 секунд, когда E нажимает, когда сосредоточен на моей двери. Пожалуйста, помощь. < /P>
код: < /p>
using System.Collections;
using UnityEngine;
public class DoorHandler1 : UnlockedDoor
{
[SerializeField] GameObject player;
[SerializeField] GameObject doorCam;
public override void OpenDoor()
{
StartCoroutine(openingDoor());
}
public override void CloseDoor()
{
//
}
private IEnumerator openingDoor()
{
player.SetActive(false);
doorCam.SetActive(true);
yield return new WaitForSeconds(3f);
player.SetActive(true);
doorCam.SetActive(false);
}
}
Функция opendoor () вызывается из другого скрипта Doorhandlerbase
DoorHandlerBase.cs:
using UnityEngine;
public class DoorHandlerBase : MonoBehaviour, DetectionHandler, DoorHandler
{
[SerializeField] bool canOpen;
[SerializeField] bool canClose;
[SerializeField] bool isOpen;
[SerializeField] KeyCode openKey = KeyCode.E;
private DoorHandler[] doorHandlers;
private bool operationInProgress = false;
void Start()
{
doorHandlers = gameObject.GetComponents();
if (doorHandlers.Length == 0)
{
Debug.LogError("DoorHandler component not found on " + name);
Debug.LogWarning("EmptyDoorHandler Added by Default.");
doorHandlers = new DoorHandler[] { new EmptyDoorHandler() };
}
}
public void DetectionStart()
{
if (!isOpen)
{
canOpen = true;
canClose = true;
}
else
{
canOpen = false;
canClose = false;
}
}
public void DetectionEnd()
{
canOpen = false;
canClose = false;
}
void Update()
{
if (!operationInProgress && Input.GetKeyDown(openKey)) {
if ((!isOpen && canOpen)||(isOpen && canClose))
{
operationInProgress = true; // Set operation in progress
if (canOpen) OpenDoor();
else if (canClose) CloseDoor();
operationInProgress = false; // Reset operation in progress after opening
}
}
}
public void OpenDoor()
{
if (canOpen)
{
isOpen = true;
foreach (DoorHandler dh in doorHandlers) dh.OpenDoor();
// Additional logic for opening the door, e.g., animations, sound effects
Debug.Log("Door opened. : " + name);
}
}
public void CloseDoor()
{
if (canClose)
{
isOpen = false;
foreach (DoorHandler dh in doorHandlers) dh.CloseDoor();
// Additional logic for closing the door, e.g., animations, sound effects
Debug.Log("Door closed. : " + name);
}
}
}
class EmptyDoorHandler : DoorHandler
{
public void OpenDoor() { }
public void CloseDoor() { }
}
< /code>
Ошибка: < /p>
StackOverflowException: The requested operation caused a stack overflow.
DoorHandler1+d__5.MoveNext () (at Assets/Scripts/Objects/Doors/Handlers/DoorHandler1.cs:24)
UnityEngine.SetupCoroutine.InvokeMoveNext (System.Collections.IEnumerator enumerator, System.IntPtr returnValueAddress) (at :0)
UnityEngine.MonoBehaviour.StartCoroutineManaged2 (System.Collections.IEnumerator enumerator) (at :0)
UnityEngine.MonoBehaviour.StartCoroutine (System.Collections.IEnumerator routine) (at :0)
DoorHandler1.OpenDoor () (at Assets/Scripts/Objects/Doors/Handlers/DoorHandler1.cs:12)
DoorHandlerBase.OpenDoor () (at Assets/Scripts/Objects/Doors/DoorHandlerBase.cs:62)
DoorHandlerBase.OpenDoor () (at Assets/Scripts/Objects/Doors/DoorHandlerBase.cs:62)
DoorHandlerBase.OpenDoor () (at Assets/Scripts/Objects/Doors/DoorHandlerBase.cs:62)
DoorHandlerBase.OpenDoor () (at Assets/Scripts/Objects/Doors/DoorHandlerBase.cs:62)
DoorHandlerBase.OpenDoor () (at Assets/Scripts/Objects/Doors/DoorHandlerBase.cs:62)
DoorHandlerBase.OpenDoor () (at Assets/Scripts/Objects/Doors/DoorHandlerBase.cs:62)
DoorHandlerBase.OpenDoor () (at Assets/Scripts/Objects/Doors/DoorHandlerBase.cs:62)
DoorHandlerBase.OpenDoor () (at Assets/Scripts/Objects/Doors/DoorHandlerBase.cs:62)
DoorHandlerBase.OpenDoor () (at Assets/Scripts/Objects/Doors/DoorHandlerBase.cs:62)
...
Подробнее здесь: https://stackoverflow.com/questions/796 ... rflowerror
Unity WaitForseconds бросает StackOverFlowerRor [закрыто] ⇐ C#
Место общения программистов C#
-
Anonymous
1751187315
Anonymous
Я пытаюсь просто переключиться на другую камеру в течение 3 секунд, когда E нажимает, когда сосредоточен на моей двери. Пожалуйста, помощь. < /P>
код: < /p>
using System.Collections;
using UnityEngine;
public class DoorHandler1 : UnlockedDoor
{
[SerializeField] GameObject player;
[SerializeField] GameObject doorCam;
public override void OpenDoor()
{
StartCoroutine(openingDoor());
}
public override void CloseDoor()
{
//
}
private IEnumerator openingDoor()
{
player.SetActive(false);
doorCam.SetActive(true);
yield return new WaitForSeconds(3f);
player.SetActive(true);
doorCam.SetActive(false);
}
}
Функция opendoor () вызывается из другого скрипта Doorhandlerbase
DoorHandlerBase.cs:
using UnityEngine;
public class DoorHandlerBase : MonoBehaviour, DetectionHandler, DoorHandler
{
[SerializeField] bool canOpen;
[SerializeField] bool canClose;
[SerializeField] bool isOpen;
[SerializeField] KeyCode openKey = KeyCode.E;
private DoorHandler[] doorHandlers;
private bool operationInProgress = false;
void Start()
{
doorHandlers = gameObject.GetComponents();
if (doorHandlers.Length == 0)
{
Debug.LogError("DoorHandler component not found on " + name);
Debug.LogWarning("EmptyDoorHandler Added by Default.");
doorHandlers = new DoorHandler[] { new EmptyDoorHandler() };
}
}
public void DetectionStart()
{
if (!isOpen)
{
canOpen = true;
canClose = true;
}
else
{
canOpen = false;
canClose = false;
}
}
public void DetectionEnd()
{
canOpen = false;
canClose = false;
}
void Update()
{
if (!operationInProgress && Input.GetKeyDown(openKey)) {
if ((!isOpen && canOpen)||(isOpen && canClose))
{
operationInProgress = true; // Set operation in progress
if (canOpen) OpenDoor();
else if (canClose) CloseDoor();
operationInProgress = false; // Reset operation in progress after opening
}
}
}
public void OpenDoor()
{
if (canOpen)
{
isOpen = true;
foreach (DoorHandler dh in doorHandlers) dh.OpenDoor();
// Additional logic for opening the door, e.g., animations, sound effects
Debug.Log("Door opened. : " + name);
}
}
public void CloseDoor()
{
if (canClose)
{
isOpen = false;
foreach (DoorHandler dh in doorHandlers) dh.CloseDoor();
// Additional logic for closing the door, e.g., animations, sound effects
Debug.Log("Door closed. : " + name);
}
}
}
class EmptyDoorHandler : DoorHandler
{
public void OpenDoor() { }
public void CloseDoor() { }
}
< /code>
Ошибка: < /p>
StackOverflowException: The requested operation caused a stack overflow.
DoorHandler1+d__5.MoveNext () (at Assets/Scripts/Objects/Doors/Handlers/DoorHandler1.cs:24)
UnityEngine.SetupCoroutine.InvokeMoveNext (System.Collections.IEnumerator enumerator, System.IntPtr returnValueAddress) (at :0)
UnityEngine.MonoBehaviour.StartCoroutineManaged2 (System.Collections.IEnumerator enumerator) (at :0)
UnityEngine.MonoBehaviour.StartCoroutine (System.Collections.IEnumerator routine) (at :0)
DoorHandler1.OpenDoor () (at Assets/Scripts/Objects/Doors/Handlers/DoorHandler1.cs:12)
DoorHandlerBase.OpenDoor () (at Assets/Scripts/Objects/Doors/DoorHandlerBase.cs:62)
DoorHandlerBase.OpenDoor () (at Assets/Scripts/Objects/Doors/DoorHandlerBase.cs:62)
DoorHandlerBase.OpenDoor () (at Assets/Scripts/Objects/Doors/DoorHandlerBase.cs:62)
DoorHandlerBase.OpenDoor () (at Assets/Scripts/Objects/Doors/DoorHandlerBase.cs:62)
DoorHandlerBase.OpenDoor () (at Assets/Scripts/Objects/Doors/DoorHandlerBase.cs:62)
DoorHandlerBase.OpenDoor () (at Assets/Scripts/Objects/Doors/DoorHandlerBase.cs:62)
DoorHandlerBase.OpenDoor () (at Assets/Scripts/Objects/Doors/DoorHandlerBase.cs:62)
DoorHandlerBase.OpenDoor () (at Assets/Scripts/Objects/Doors/DoorHandlerBase.cs:62)
DoorHandlerBase.OpenDoor () (at Assets/Scripts/Objects/Doors/DoorHandlerBase.cs:62)
...
Подробнее здесь: [url]https://stackoverflow.com/questions/79683446/unity-waitforseconds-throwing-stackoverflowerror[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия