Как выпустить несколько лучей от одного объекта в Unity?
Как я могу выпустить несколько лучей из одного объекта в Unity?
Я сделал, чтобы 4 луча уже выходили, но я сомневаюсь, что это нужно делать именно таким способом.
void FixedUpdate()
{
Ray _ray_0 = new Ray(transform.position, transform.forward);
Ray _ray_1 = new Ray(transform.position, -transform.forward);
Ray _ray_2 = new Ray(transform.position, transform.right);
Ray _ray_3 = new Ray(transform.position, -transform.right);
Debug.DrawRay(transform.position, transform.forward*Delta_Range, Color.yellow);
Debug.DrawRay(transform.position, -transform.forward*Delta_Range, Color.yellow);
Debug.DrawRay(transform.position, transform.right*Delta_Range, Color.yellow);
Debug.DrawRay(transform.position, -transform.right*Delta_Range, Color.yellow);
}
Ведь если мне нужно будет сделать не 4, а 15 лучей, то, используя этот способ, придется прописывать все 15 лучей отдельно.
Мне кажется, что есть более красивый и простой способ сделать это?
Мне интересно разобраться, как сделать это именно с помощью лучей (Raycast).

Ответы (1 шт):
Этот код генерирует заданное количество лучей вокруг объекта с равными углами между ними:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[ExecuteAlways] // Это нужно, чтобы можно было увидеть результат, не запуская игру
public class Character : MonoBehaviour
{
[SerializeField, Min(1)] private int _countRays; // Кол-во лучей
[SerializeField] private float _length; // Длина
public void Update()
{
DrawRays();
}
private void DrawRays ()
{
float circumference = 2 * Mathf.PI;
float angle = circumference / _countRays; // Высчитываем угол
for (float currAngle = 0; currAngle < circumference; currAngle += angle)
{
Vector3 direction = new Vector3(Mathf.Cos(currAngle), 0, Mathf.Sin(currAngle)); // Расчитываем луч
Debug.DrawRay(transform.position, direction * _length, Color.red);
}
}
}
Вместо [SerializeField, Min(1)], что задает минимальное количество лучей -- 1, можно написать [SerializeField, Range(X, Y)]. Так вы четко ограничите количество лучей: от X до Y, а переменная в инспекторе превратится в удобный ползунок.