Я надеюсь, вы могли бы помочь мне. Я хочу, чтобы мой вражеский объект остановился через несколько секунд, а затем двинулся еще через несколько секунд. Пока все работает, но объекты прыгают в верхний правый угол через несколько секунд после их остановки. Можете ли вы дать мне несколько советов о том, что я сделал неправильно и как я могу сделать это лучше.
Сценарий управления мячом:
public class Ball_Controller : MonoBehaviour
{
public Rigidbody2D rb;
public float ballForce;
public Rigidbody2D rbtwo;
public loselevel lose;
public float moving;
public startMovement startMove;
private bool isMoving = false;
private void Start()
{
lose = GameObject.FindObjectOfType<loselevel>();
rb = GetComponent<Rigidbody2D>();
moving = transform.position.x;
startMove = GameObject.FindObjectOfType<startMovement>();
}
public void Update()
{
if (moving < transform.position.x)
{
StartCoroutine(stopMovement());
isMoving = true;
}
if (isMoving == true )
{
isMoving = false;
startMove.beginnMovement();
}
}
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.tag.Equals("Player"))
{
Destroy(gameObject);
Destroy(GameObject.FindWithTag("Player"));
lose.startFinish();
}
}
public void BallControll()
{
rb.AddForce(new Vector2(ballForce, ballForce));
rbtwo.AddForce(new Vector2(ballForce, ballForce));
}
public IEnumerator stopMovement()
{
yield return new WaitForSeconds(4f);
rb.velocity = Vector2.zero;
Debug.Log("Stop moving");
}
}
Скрипт для запуска противника после остановки:
public class startMovement : MonoBehaviour
{
public Ball_Controller bc;
// Start is called before the first frame update
void Start()
{
bc = GameObject.FindObjectOfType<Ball_Controller>();
}
// Update is called once per frame
void Update()
{
}
public IEnumerator beginMovement()
{
yield return new WaitForSeconds(10f);
bc.BallControll();
Debug.Log("start moving");
}
public void beginnMovement()
{
StartCoroutine(beginMovement());
}
}