LOL施法距离,普攻距离范围计算

2015年03月20日 11:55 1 点赞 0 评论 更新于 2025-11-21 17:50

效果图

(此处原文未给出具体效果图相关有效信息,可后续补充完整的效果图展示)

代码实现

以下是使用Unity引擎实现绘制圆形范围的代码,该范围可用于模拟LOL中的施法距离、普攻距离等。

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

public class CDrawLine : MonoBehaviour
{
// 点数,用于控制圆形的精度,点数越多圆形越平滑
public int pointCount = 10;

// 距离,即范围半径
public float radius = 10f;

// 每个点之间的角度
private float angle;

// 存储圆形上每个点的位置
private List<Vector3> pointList = new List<Vector3>();

// 用于绘制线条的组件
private LineRenderer render;

// 是否显示绘制的线条
public bool showRenderer = false;

// 初始化方法,在脚本实例被启用时调用
void Start()
{
// 计算每个点之间的角度
angle = 360f / pointCount;

// 获取当前对象的LineRenderer组件
render = this.GetComponent<LineRenderer>();
}

// 更新方法,每帧调用一次
void Update()
{
if (showRenderer)
{
// 设置LineRenderer的顶点数量,额外加1是为了闭合圆形
render.SetVertexCount(pointCount + 1);

// 计算第一个点的位置
Vector3 vect3 = transform.position + transform.forward * radius;
pointList.Add(vect3);

// 获取当前对象的旋转信息
Quaternion rotation = transform.rotation;

// 计算其余点的位置
for (int i = 1; i < pointCount; i++)
{
// 求出第i个点的旋转角度
Quaternion quat = Quaternion.Euler(rotation.eulerAngles.x, rotation.eulerAngles.y - (angle * i), rotation.eulerAngles.z);

// 计算第i个点的位置
vect3 = transform.position + (quat * Vector3.forward) * radius;

// 将第i个点的位置添加到列表中
pointList.Add(vect3);
}

// 绘制线条
for (int j = 0; j < pointList.Count; j++)
{
// 设置LineRenderer上每个顶点的位置
render.SetPosition(j, pointList[j]);
}

// 闭合圆形,将最后一个顶点的位置设置为第一个顶点的位置
if (pointList.Count > 0)
render.SetPosition(pointCount, pointList[0]);
}
else
{
// 不显示时,将顶点数量设置为0
render.SetVertexCount(0);
}

// 清空存储点位置的列表
pointList.Clear();
}
}

代码解释

  1. 变量定义

    • pointCount:控制圆形的精度,点数越多,圆形越接近真实的圆形。
    • radius:表示圆形的半径,可用于模拟施法距离或普攻距离。
    • angle:每个点之间的角度,通过360度除以点数计算得出。
    • pointList:用于存储圆形上每个点的位置。
    • renderLineRenderer组件,用于绘制线条。
    • showRenderer:控制是否显示绘制的线条。
  2. Start方法

    • 计算每个点之间的角度。
    • 获取当前对象的LineRenderer组件。
  3. Update方法

    • 根据showRenderer的值决定是否绘制线条。
    • showRenderertrue时,计算圆形上每个点的位置,并将其设置到LineRenderer上,最后闭合圆形。
    • showRendererfalse时,将LineRenderer的顶点数量设置为0。
    • 清空存储点位置的列表,以便下一帧重新计算。

通过以上代码,我们可以在Unity中实现一个简单的圆形范围绘制,用于模拟LOL中的施法距离和普攻距离。

作者信息

menghao

menghao

共发布了 3994 篇文章