Как RaycastHit2D BoxCastAll в Unity используется правильно? - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь использовать box raycaster, чтобы генерировать урон вражеским объектам, нанесенный лазерным оружием, которое поражает все на его линии прогресса.

Я пытался следовать логике c документации Unity. но текущий код не дает никакого эффекта. Вражеские объекты имеют 2D-компоненты столкновения и прекрасно реагируют на другие 2D-коллайдеры.

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

public class LaserController : MonoBehaviour
{
    private Transform laser;
    Vector2 boxSize;
    private Vector2 previousPos;
    // Start is called before the first frame update
    void Start()
    {
        boxSize = new Vector2(1.8f * SceneScale.ratio, 0.1f * SceneScale.ratio);
        laser = GetComponent<Transform>();
        previousPos = new Vector2(laser.position.x, laser.position.y);
    }
    void FixedUpdate()
    {
        previousPos = laser.position;
        laser.position += transform.up * 3 * SceneScale.ratio;
        if (laser.position.y >= 10 * SceneScale.ratio)
        {
            Destroy(gameObject);
        }
        RaycastHit2D[] laserHit = Physics2D.BoxCastAll(previousPos, boxSize, laser.eulerAngles.z, new Vector2(transform.position.x, transform.position.y) - previousPos,
            Camera.main.ScreenToWorldPoint(new Vector3(0, Screen.height, 0)).y, 0, -Mathf.Infinity, Mathf.Infinity);
        for (int i = 0; i < 5; i++)
        {
            EnemyHP hpComponent = laserHit[i].collider.gameObject.GetComponent<EnemyHP>();
            hpComponent.health = 0;
            Destroy(laserHit[i].collider.gameObject, 1);
            PlayerScore.playerScore++;
        }

    }
}

Заранее спасибо.

...