Объект прыгает в верхний правый угол после старта - PullRequest
0 голосов
/ 18 февраля 2020

Я надеюсь, вы могли бы помочь мне. Я хочу, чтобы мой вражеский объект остановился через несколько секунд, а затем двинулся еще через несколько секунд. Пока все работает, но объекты прыгают в верхний правый угол через несколько секунд после их остановки. Можете ли вы дать мне несколько советов о том, что я сделал неправильно и как я могу сделать это лучше.

Сценарий управления мячом:

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());

    }
}
...