@Z_programist

Не работает рейкаст в юнити 2д. Что делать?

У меня есть одни спрайт с скриптом управления, который является игроком, и другой обьект с тэгом "enemy", который является врагом. Вот строчка скрипта управления, которая отвечает за рейкаст:
void Punch()
    {
        RaycastHit2D hit = Physics2D.Raycast(gameObject.transform.position, transform.TransformDirection(Vector2.right), ray_length);
        Debug.DrawRay(gameObject.transform.position, Vector2.right * ray_length, Color.red);
        
        if(Input.GetKeyDown(KeyCode.E))
        {
            if (hit.collider != null)
            {
                if(hit.collider.gameObject.CompareTag("enemy"))
                {
                    Debug.Log("enemy");
                }
            } 
        }
    }

А вот весь скрипт игрока если надо:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class character_script_2 : MonoBehaviour
{
    public string name;
    public float velocity;
    public float JumpForce;
    public float timer;
    public float punch_time;
    public float ray_length;

    public floor_on floortouch;
    public GameObject punch;

    private Rigidbody2D rb1;

    public RaycastHit2D hit;
    
    void Awake()
    {
        rb1 = gameObject.GetComponent<Rigidbody2D>();
    }
    void Update()
    {
        if(timer > 0)
        {
            timer -= Time.deltaTime;
        }
        //if(punch_time > 0)
        //{
        //    punch_time -= Time.deltaTime;
        //}
        //else if(punch_time <= 0)
        //{
            
        //}

        floor_on floortouch;

        Move(); 
        Jump();
        Punch();
    }
    void Punch()
    {
        RaycastHit2D hit = Physics2D.Raycast(gameObject.transform.position, transform.TransformDirection(Vector2.right), ray_length);
        Debug.DrawRay(gameObject.transform.position, Vector2.right * ray_length, Color.red);
        
        if(Input.GetKeyDown(KeyCode.E))
        {
            if (hit.collider != null)
            {
                if(hit.collider.gameObject.CompareTag("enemy"))
                {
                    Debug.Log("enemy");
                }
            } 
        }
    }
    // Движения персонажа
    void Move()
    {
        if (Input.GetAxisRaw ("Horizontal") > 0) 
        {
            transform.Translate (Vector2.right * velocity * Time.deltaTime);
            transform.eulerAngles = new Vector2 (0, 0);
            Debug.Log(Input.GetAxisRaw ("Horizontal"));
        }
        else if (Input.GetAxisRaw ("Horizontal") < 0) 
        {
            transform.Translate (Vector2.right * velocity * Time.deltaTime);
            transform.eulerAngles = new Vector2 (0, 180);
            Debug.Log(Input.GetAxisRaw ("Horizontal"));
        }
    }
    
    // Прыжок персонажа был еще той занозой в заднице
    void Jump()
    {
        if (Input.GetKeyDown(KeyCode.Space) && floortouch.on_floor == true && timer <= 0.0f)
        {
            rb1.AddForce(Vector2.up * JumpForce, ForceMode2D.Impulse);
            floortouch.on_floor = false;
        }
        else if(Input.GetKeyDown(KeyCode.Space) && floortouch.on_floor == false)
        {
            rb1.AddForce(Vector2.down * 40, ForceMode2D.Impulse);
            floortouch.on_floor = true;
            timer = 0.10f;
        } 
    }
}

Вот игрок:
60dce40fd903c187901052.pngъ
Вот враг:
60dce453853bc684041518.png
60dce46477218135702574.png
Рейкаст касается игрока и кнопка E нажимается, но почему-то в консоль не выводится "enemy". А так же я не знаю как поменять повернуть рейкаст. Я перерыл все форумы, но не нашел ответа
60dce573c0608529550826.png
  • Вопрос задан
  • 229 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Xoggas
Не очень понятно где и когда вызывается метод Punch(), по идее у вас вот эта часть
if(Input.GetKeyDown(KeyCode.E))
        {
            if (hit.collider != null)
            {
                if(hit.collider.gameObject.CompareTag("enemy"))
                {
                    Debug.Log("enemy");
                }
            } 
        }

должна быть в методе Update(), надеюсь чем-то помог ))
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы