UNity. Движение противника

Программирование на Юнити.

UNity. Движение противника

Сообщение Newer 04 авг 2020, 16:33

Здравствуйте ! Создаю 2D платформер , решил создать простого врага , который движется вправо и влево. К нему прикреплен бокс коллайдер и пустышка , считывающая расстояние до конца платформы.

Код движения я написал, но когда он сталкивается с героем он бежит в противоположную сторону, не подскажете как сделать так, чтобы он продолжал своё движение , отталкивая героя ?
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Patrol : MonoBehaviour
{
    [SerializeField]
    private float speed = 5;
   

    private bool moovingRight = true;

    [SerializeField]
    private Transform groundDetectionl;      

    void Update()
    {
        transform.Translate(Vector2.right * speed * Time.deltaTime);        

        Move();        
       
    }

    void Move()
    {        
        RaycastHit2D groundRightInfo = Physics2D.Raycast(groundDetectionl.position, Vector2.right, 0.5f);

        RaycastHit2D groundLeftInfo = Physics2D.Raycast(groundDetectionl.position, Vector2.left, 0.5f);

        // вариант когда пространство моба ограничено и он двигается в право и в лево
        if (groundRightInfo.collider && groundLeftInfo.collider)
        {
            if (moovingRight == true)
            {
                transform.eulerAngles = new Vector3(0, -180, 0);
                moovingRight = false;
            }
            else
            {
                transform.eulerAngles = new Vector3(0, 0, 0);
                moovingRight = true;
            }
        }        

    }
   
}
Newer
UNец
 
Сообщения: 6
Зарегистрирован: 10 июл 2020, 16:14

Re: UNity. Движение противника

Сообщение erora 04 авг 2020, 18:01

Проверять в рейкасте также слой на который он может бросать луч. И бросать луч только на слой Platform (или как вы назовете, это слой на котором висят ваши платформы), а не на все слои. Ну и тогда в Edit - Project Settings - Phisics 2D отключить столкновения слоя вашего Player с слоем вашей пустышки которая бросает луч.
Аватара пользователя
erora
UNец
 
Сообщения: 42
Зарегистрирован: 11 июн 2020, 15:15

Re: UNity. Движение противника

Сообщение Newer 04 авг 2020, 21:22

erora писал(а):Проверять в рейкасте также слой на который он может бросать луч. И бросать луч только на слой Platform (или как вы назовете, это слой на котором висят ваши платформы), а не на все слои. Ну и тогда в Edit - Project Settings - Phisics 2D отключить столкновения слоя вашего Player с слоем вашей пустышки которая бросает луч.


Спасибо за ответ .
Как ты и сказал , добавил слои и вроде всё работает
Синтаксис:
Используется csharp
RaycastHit2D groundRightInfo = Physics2D.Raycast(groundDetectionl.position, Vector2.right, 0.5f , groundLayer);

 RaycastHit2D groundLeftInfo = Physics2D.Raycast(groundDetectionl.position, Vector2.left, 0.5f ,groundLayer
Newer
UNец
 
Сообщения: 6
Зарегистрирован: 10 июл 2020, 16:14


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7