Unity 2D - лучи не идут в правильном направлении - PullRequest
0 голосов
/ 29 декабря 2018

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

Вот код для сценария лазера:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Laser : MonoBehaviour {
    private LineRenderer Linerenderer;
    public List<Transform> rays;

    void Start()
    {
        Physics2D.queriesStartInColliders = false;
    }
    void Update () {

        foreach (Transform tran in rays)
        {
            RaycastHit2D hit = Physics2D.Raycast(transform.position, tran.position,20);
            Debug.DrawLine(transform.position, hit.point);
        }
    }
}

Снимки экрана:

-Использование мировых позиций:

-Использование локальных позиций:

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

Спасибо, после небольшого возни, я наконец-то смог заставить его работать.Если кому-то еще нужна помощь с чем-то похожим (динамическое приведение лучей).Вот окончательный код (возможно, вам придется немного его отредактировать):

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Laser : MonoBehaviour {
    private LineRenderer Linerenderer;
    public List<Transform> rays;

    void Start()
    {
        Physics2D.queriesStartInColliders = false;

    }
    void Update()
    {

        foreach (Transform tran in rays)
        {
            Debug.DrawRay(new Vector3(1, 1, 0), new Vector3(-1, -1, 0));
            Vector2 direction = (tran.position - transform.position).normalized;
            RaycastHit2D hit = Physics2D.Raycast(transform.position, direction);
            Vector2 rayDirection = (hit.point - new Vector2( transform.position.x, transform.position.y));
            Debug.DrawRay(transform.position, rayDirection);
        }
    }
}
0 голосов
/ 29 декабря 2018

Второй параметр метода Physics2D.Raycast () , который вы указываете, неверен: это должна быть не позиция в пространстве , а направление .Вторым параметром для метода Debug.DrawRay () является и направление , а не точка в пространстве .

Попробуйте выполнить следующее:

void Update () {

    foreach (Transform tran in rays)
    {
        Vector2 direction = (tran.position - transform.position).normalized;
        RaycastHit2D hit = Physics2D.Raycast(transform.position, direction, 20);

        Vector2 rayDirection = hit.point - transform.position;
        Debug.DrawRay(transform.position, rayDirection);
    }
}
...