Я написал метод расширения, чтобы объект перемещался со временем. Это работает хорошо; однако, поскольку объект выполняет эту задачу в течение определенного периода времени, он игнорирует все другие вызовы, такие как мой метод обновления. Я предполагаю, что мне нужно что-то сделать с помощью Coroutine, но я не могу понять, где это происходит. Как я могу сделать следующую работу кода, не предотвращая запуск синтаксиса другого кода (например, метода Update())? Упрощенная версия выглядит следующим образом:Coroutine in Extension Method
======================================================================================================================================================= ===========================================
//The following script is attached to the GameObject
[RequireComponent(typeof(Rigidbody2D)]
public class MyBehaviour : MonoBehaviour
{
void Start()
{
rigidbody2D.MoveOverTime();
}
void Update(){
rigidbody2D.MovePosition(transform.position.x + 1, transform.position.y);
}
}
================================================== ================================
//The following script is not attached to anything
public static class Rigidbody2DExtension
{
public static void MoveOverTime(this Rigidbody2D rigidbody2D)
{
gameObject.addComponent<MoveOverTimeComponent>();
}
}
[RequireComponent(typeof(Rigidbody2D)]
class MoveOverTimeComponent : MonoBehaviour
{
void Update(){
MovePositionByALittleBit();
}
void MovePositionByALittleBit(){
float x = transform.position.x + 1;
float y = transform.position.y;
rigidbody2D.MovePosition(new Vector2(x, y));
}
}
Зачем нужно вызывать метод 'Update'? Насколько мне известно, они никогда не вызываются. –
@KirkWoll Они называются автоматически как расширение MonoBehaviour – Evorlor
Как? Вы не переопределяете метод, и он является конфиденциальным. –