EDIT: Ответ, решающий эту проблему, действительно находится в ответе сообщения, дубликат которого этот. Если у вас есть та же проблема, что и в заголовке, обратитесь к другому сообщению.Начать сопрограммы, когда класс не является MonoBehaviour
Я сделал простой буровой установки, которая перемещает материал с течением времени, как это:
Transform from;
Transform to;
float overTime;
IUIAnimationEvent chain;
public delegate void UIchain();
public event UIchain NEXT_FUNCTION;
public MoveAction(Transform from, Transform to, float overTime, IUIAnimationEvent chain)
{
this.from = from;
this.to = to;
this.overTime = overTime;
this.chain = chain;
}
public void Move()
{
MonoBehaviour _lead = new MonoBehaviour();
if (moveRoutine != null)
{
_lead.StopCoroutine(moveRoutine);
}
moveRoutine = _Move(from, to, overTime);
_lead.StartCoroutine(moveRoutine);
}
IEnumerator _Move(Transform from, Transform to, float overTime)
{
Vector2 original = from.position;
float timer = 0.0f;
while (timer < overTime)
{
float step = Vector2.Distance(original, to.position) * (Time.deltaTime/overTime);
from.position = Vector2.MoveTowards(from.position, to.position, step);
timer += Time.deltaTime;
yield return null;
}
if(NEXT_FUNCTION != null)
{
NEXT_FUNCTION();
}
}
Однако, чтобы сделать его работу, как я хочу, я должен Instantiate них, поэтому они не могут быть MonoBehaviour
, Обратите внимание, что я сделал с переменной _lead
. Я сделал это, чтобы начать coroutines
, как и любой другой. Если мой класс NOT a MonoBehaviour
, как начать с него coroutine
?
Или, если это не представляется возможным, как экземпляр классов, которые AREMonoBehaviour
? Вместо этого я заметил _use AddComponent
, но классы не компонентов. Они используются другим компонентом и не будут помещаться на контролера GameObject
.
Спасибо за ввод. Как правило, это сработает, но я внедрил 'void Move()' для сопрограммы явно, так что _одно ** один ** 'Move()' может влиять на один компонент пользовательского интерфейса за раз. Если запускается другой, уже запущенная сопрограмма прекращена и вызывается новый ._ – agiro
@agiro «Если запускается другой, уже запущенная сопрограмма остановлена, а новая называется« Пожалуйста, задайте это как новый вопрос. – Programmer
@Programmer Я уже добавил, что теперь только один может воздействовать на один объект, как я и хотел, это был не вопрос, из-за этого я не могу начать с другого класса. – agiro