Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+1

Игра на юнити (проблема с врагом)

наляпал скрипт при котором если враг заходит за его арену обитания то он меняет направление и идет назад и если с другой стороны то также , ну крч патрулирование , и в итоге запускаю и он просто зависает на одной точке где кончается его арена ареала и не разворачивается , помогите и подскажите что не так , я начинающий
вот код:

12345678910111213141516171819202122232425262728293031323334
 using UnityEngine; 
using System.Collections; 
 
class EnemyWalk : MonoBehaviour 
{ 
    public GameObject leftBorder; 
    public GameObject rightBorder; 
    public Rigidbody2D rigidbody; 
 
    public bool isRightDirection; 
 
    public float speed; 
     
 
    private void Update() { 
        if (isRightDirection) 
        { 
            rigidbody.velocity = Vector2.right * speed; 
            if (transform.position.x > rightBorder.transform.position.x) 
                isRightDirection = !isRightDirection; 
        } 
        else 
        { 
            rigidbody.velocity = Vector2.left * speed; 
            if (transform.position.x < rightBorder.transform.position.x) 
                isRightDirection = !isRightDirection; 
        } 
     
    } 
    
     
     
 
} 
По дате
По рейтингу

Привет! Я вижу, что у вас возникла проблема с патрулированием врага в Unity. Проблема заключается в том, что в вашем коде условие для смены направления проверяется только для `rightBorder`. Вам нужно добавить проверку для `leftBorder` в блоке `else`. Вот исправленный код:


1234567891011121314151617181920212223242526272829
 using UnityEngine; 
using System.Collections; 
 
class EnemyWalk : MonoBehaviour 
{ 
    public GameObject leftBorder; 
    public GameObject rightBorder; 
    public Rigidbody2D rigidbody; 
 
    public bool isRightDirection; 
 
    public float speed; 
 
    private void Update() { 
        if (isRightDirection) 
        { 
            rigidbody.velocity = Vector2.right * speed; 
            if (transform.position.x > rightBorder.transform.position.x) 
                isRightDirection = !isRightDirection; 
        } 
        else 
        { 
            rigidbody.velocity = Vector2.left * speed; 
            // Используйте leftBorder здесь, а не rightBorder 
            if (transform.position.x < leftBorder.transform.position.x) 
                isRightDirection = !isRightDirection; 
        } 
    } 
}  


Теперь враг должен разворачиваться, достигнув `leftBorder` и `rightBorder`. Удачи с вашим проектом на Unity! Если у вас возникнут еще вопросы, не стесняйтесь спрашивать.