Готовый сборный домик не двигается - PullRequest
0 голосов
/ 20 января 2019

Я очень новичок в единстве, и у меня были проблемы с моим экземпляром готового сборного дома.Я пытаюсь заставить свой экземплярный префаб двигаться, как только он загружается на сцену, однако проблема в том, что он вообще не двигается.Объект загружается в мою сцену, но остается статичным.Я попытался добавить в Update () и FixedUpdate () и переместить вражеского Move () в них, но он все еще не работает.Я не уверен, в чем может быть проблема.

void Awake()
{
    rigidbody2DComponent = enemyPrefab.GetComponent<Rigidbody2D>();
    initialYPosition = transform.position.y;

}

void Start()
{

    enemyObject = Instantiate(enemyPrefab, enemyInitialPosition.position, transform.rotation);
    enemyObject.name = "Enemy";
    enemyObject.transform.parent = transform;
    enemyMove();
}

void enemyMove()
{
    speed = Random.Range(-10, -20);

    rigidbody2DComponent.AddForce(transform.up * speed, ForceMode2D.Force);

    //keep track of the old x position
    initialXPosition = transform.position.x;

    //store the new x position
    newXPosition = initialXPosition;

    //new x position cannot be the same as the old x position
    while (Mathf.Abs(newXPosition - initialXPosition) < 1)
    {
        newXPosition = Random.Range(-6f, 6f);
    }
}

public void OnTriggerEnter2D(Collider2D other)
{
    if (other.tag == "Player" || other.tag == "resetWall")
    {

        enemyMove();

        //instantiate a new enemy object everytime it hits player or the bottom wall
        newEnemyObject = (GameObject) GameObject.Instantiate(enemyObject, new Vector2(newXPosition, initialYPosition), transform.rotation);

        //Without changing the name, the original name will get a bunch of
        //(clone) added to it as it respawns
        newEnemyObject.name = "newEnemy";

        //Destroy the old enemy
        Destroy(this.gameObject);
    }
}`

Ответы [ 3 ]

0 голосов
/ 20 января 2019

Подождите, вы уверены, что initialXPosition = transform.position.x; меньше значения, чем 7?Если нет, поместите Debug.Log в

while (Mathf.Abs(newXPosition - initialXPosition) < 1)
{
    newXPosition = Random.Range(-6f, 6f);
    Debug.Log("Infinity");
}

Может быть, вы застряли в бесконечном цикле?initialXPosition должно быть меньше значения 7, иначе он никогда не выйдет из этого цикла.

0 голосов
/ 20 января 2019

Это для тех, кто может столкнуться с подобной проблемой:

Что мне нужно было сделать, так это фактически отделить мои функции перемещения и триггера от мастер-скрипта в скрипт, прикрепленный к префабу.

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} *} * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} * * * * * * * * * * * * * * * * * * * * * * Тоже * * * * * * * * * * * * * * *.сборный сценарий

void Start()
{
    rigidbody2DComponent = GetComponent<Rigidbody2D>();
    initialYPosition = transform.position.y;
    Move();
}

void Move()
{
    speed = Random.Range(-10, -20);

    rigidbody2DComponent.velocity = new Vector2(0, speed);

    //keep track of the old x position
    initialXPosition = transform.position.x;

    //store the new x position
    newXPosition = initialXPosition;

    //new x position cannot be the same as the old x position
    while (Mathf.Abs(newXPosition - initialXPosition) < 1)
    {
        newXPosition = Random.Range(-6f, 6f);
    }

    transform.position = new Vector3(newXPosition, initialYPosition, transform.position.z);
}

public void OnTriggerEnter2D(Collider2D other)
{
    if (other.tag == "Player" || other.tag == "resetWall")
    {

        //Lets let our master script take care of spawning
        Enemy.SpawnEnemy.Spawn();

        //Let's let our master script handle this
        //Without changing the name, the original name will get a bunch of
        //(clone) added to it as it respawns
        //newEnemyObject.name = "newEnemy";
        //newEnemyObject.tag = "Enemy";

        //Destroy the old enemy
        Destroy(gameObject);
    }
}
0 голосов
/ 20 января 2019

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

transform.position = new Vector3(newXPosition, newYPosition, transform.position.z);

Или используйте initialYPosition в качестве второго параметра, если вы не выполняете вычисления для части Y.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...