58 lines
1.8 KiB
C#
58 lines
1.8 KiB
C#
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using UnityEngine;
|
||
|
||
public class Radar : MonoBehaviour
|
||
{
|
||
public int numRays = 360; // 雷达射线数量
|
||
public float maxDistance = 10f; // 雷达探测的最大距离
|
||
public float rotationSpeed = 10f; // 雷达旋转速度
|
||
|
||
private LineRenderer lineRenderer;
|
||
private float angleStep;
|
||
|
||
void Start()
|
||
{
|
||
lineRenderer = GetComponent<LineRenderer>();
|
||
lineRenderer.positionCount = numRays + 1; // 设置顶点数量(加1是为了闭合线条)
|
||
|
||
angleStep = 360f / numRays; // 计算每个射线之间的角度间隔
|
||
|
||
// 设置LineRenderer的宽度和颜色
|
||
lineRenderer.startWidth = 0.05f;
|
||
lineRenderer.endWidth = 0.05f;
|
||
lineRenderer.startColor = Color.green;
|
||
lineRenderer.endColor = Color.green;
|
||
|
||
// 启动雷达扫描协程
|
||
StartCoroutine(Scan());
|
||
}
|
||
|
||
IEnumerator Scan()
|
||
{
|
||
while (true)
|
||
{
|
||
for (int i = 0; i <= numRays; i++)
|
||
{
|
||
float angle = i * angleStep;
|
||
Vector3 direction = Quaternion.Euler(0f, angle, 0f) * transform.forward; // 计算射线方向
|
||
|
||
RaycastHit hit;
|
||
if (Physics.Raycast(transform.position, direction, out hit, maxDistance))
|
||
{
|
||
lineRenderer.SetPosition(i, hit.point); // 如果射线命中物体,将顶点位置设置为命中点
|
||
}
|
||
else
|
||
{
|
||
lineRenderer.SetPosition(i, transform.position + direction * maxDistance); // 如果射线未命中物体,将顶点位置设置为最大距离处
|
||
}
|
||
}
|
||
|
||
// 旋转雷达
|
||
transform.Rotate(0f, rotationSpeed * Time.deltaTime, 0f);
|
||
|
||
yield return null;
|
||
}
|
||
}
|
||
}
|