制作攻击指针
首先创建一个 ArrowLine 的对象,然后给它添加 LineRenderer,将线宽改为 1.5,Materials 改为 RedArrow
RedArrow 就长这个样子
鼠标点击攻击牌的时候出现指针
二次贝塞尔曲线理论和实现方式
相关代码
public void SetArrowPosition()
{
Vector3 cardPosition = transform.position; // 卡牌位置
Vector3 direction = mousePos - cardPosition; // 从卡牌指向鼠标的方向
Vector3 normalizedDirection = direction.normalized; // 归一化方向
// 计算垂直于卡牌到鼠标方向的向量
Vector3 perpendicular = new(-normalizedDirection.y, normalizedDirection.x, normalizedDirection.z);
// 设置控制点的偏移量
Vector3 offset = perpendicular * arcModifier; // 你可以调整这个值来改变曲线的形状
Vector3 controlPoint = (cardPosition + mousePos) / 2 + offset; // 控制点
lineRenderer.positionCount = pointsCount; // 设置 LineRenderer 的点的数量
for (int i = 0; i < pointsCount; i++)
{
float t = i / (float)(pointsCount - 1);
Vector3 point = CalculateQuadraticBezierPoint(t, cardPosition, controlPoint, mousePos);
lineRenderer.SetPosition(i, point);
}
}
//计算二次贝塞尔曲线点
Vector3 CalculateQuadraticBezierPoint(float t, Vector3 p0, Vector3 p1, Vector3 p2)
{
float u = 1 - t;
float tt = t * t;
float uu = u * u;
Vector3 p = uu * p0; // 第一项
p += 2 * u * t * p1; // 第二项
p += tt * p2; // 第三项
return p;
}
项目相关代码
代码仓库:https://gitee.com/nbda1121440/DreamOfTheKingdom.git
标签:Vector3,20,normalizedDirection,float,pointsCount,指针,拖拽,cardPosition From: https://www.cnblogs.com/hellozjf/p/18054199