(client) feat:健康给予,路径优化,结算界面,商店界面 (#60)

Co-authored-by: m0_75251201 <m0_75251201@noreply.gitcode.com>
Reviewed-on: http://47.107.252.169:3000/Roguelite-Game-Developing-Team/Gen_Hack-and-Slash-Roguelite/pulls/60
This commit is contained in:
2025-10-10 14:08:23 +08:00
parent 9a797479ff
commit 16b49f3d3a
1900 changed files with 114053 additions and 34157 deletions

View File

@@ -3,9 +3,9 @@ using UnityEngine;
namespace UI
{
/// <summary>
/// 技能节点连接线UI组件。
/// 该组件用于管理贝塞尔曲线的生成和显示连接两个技能节点或其他UI元素。
/// 它通过控制贝塞尔曲线生成器的参数实现UI元素之间的视觉连接。
/// 技能节点连接线UI组件。
/// 该组件用于管理贝塞尔曲线的生成和显示连接两个技能节点或其他UI元素。
/// 它通过控制贝塞尔曲线生成器的参数实现UI元素之间的视觉连接。
/// </summary>
// 确保当前GameObject拥有RectTransform组件因为这是一个UI组件其布局和定位依赖于它。
[RequireComponent(typeof(RectTransform))]
@@ -13,10 +13,13 @@ namespace UI
{
// 引用UILineRenderer组件用于实际绘制曲线。
public UILineRenderer line;
// 引用UIBezierCurveGenerator组件负责根据控制点计算贝塞尔曲线的几何点。
public UIBezierCurveGenerator curveGenerator;
// 曲线起始点关联的UI元素例如箭头的头部或起始连接点标识。
public GameObject lineHead;
// 曲线结束点关联的UI元素例如箭头的尾部或结束连接点标识。
public GameObject lineTail;
@@ -25,29 +28,24 @@ namespace UI
[HideInInspector] public RectTransform rectTransform;
/// <summary>
/// 当脚本实例被启用时,或者首次加载时调用。
/// 用于初始化和检查必要的组件。
/// 当脚本实例被启用时,或者首次加载时调用。
/// 用于初始化和检查必要的组件。
/// </summary>
private void Awake()
{
// 获取当前GameObject的RectTransform组件。
rectTransform = GetComponent<RectTransform>();
// 检查贝塞尔曲线生成器是否已赋值。
if (curveGenerator == null)
{
Debug.LogError("UIBezierCurveGenerator未赋值给SkillNodeLinkLineUI", this);
}
if (curveGenerator == null) Debug.LogError("UIBezierCurveGenerator未赋值给SkillNodeLinkLineUI", this);
// 检查UILineRenderer是否已赋值。
// 注意UILineRenderer通常由UIBezierCurveGenerator管理但此处也进行一个警告检查。
if (line == null)
{
Debug.LogWarning("UILineRenderer未赋值给SkillNodeLinkLineUI。它可能由UIBezierCurveGenerator自动处理或需要手动赋值。", this);
}
}
/// <summary>
/// 设置曲线的起始点和结束点并更新贝塞尔曲线的生成以及线头线尾UI元素的位置。
/// 设置曲线的起始点和结束点并更新贝塞尔曲线的生成以及线头线尾UI元素的位置。
/// </summary>
/// <param name="startWorldPos">曲线起始点的世界坐标。</param>
/// <param name="endWorldPos">曲线结束点的世界坐标。</param>
@@ -79,15 +77,12 @@ namespace UI
// 根据起始点和结束点X坐标的绝对差值来调整偏移量使曲线在近距离时更平滑。
var xDiff = Mathf.Abs(startWorldPos.x - endWorldPos.x); // 使用世界坐标计算X轴差值更直观。
if (xDiff < 200f)
{
horizontalOffset = xDiff / 2f + 20f; // 在X轴差值较小时减小偏移量。
}
if (xDiff < 200f) horizontalOffset = xDiff / 2f + 20f; // 在X轴差值较小时减小偏移量。
// 3. 计算贝塞尔曲线的四个控制点 (P0, P1, P2, P3)。
var p0 = localStartPos; // 贝塞尔曲线的起始点。
var p3 = localEndPos; // 贝塞尔曲线的终止点。
Vector2 p1, p2; // 贝塞尔曲线的两个控制点。
var p3 = localEndPos; // 贝塞尔曲线的终止点。
Vector2 p1, p2; // 贝塞尔曲线的两个控制点。
// 根据起始点和结束点X坐标的相对位置确定控制点P1和P2的水平偏移方向،
// 以保证曲线的自然走向。
@@ -108,14 +103,8 @@ namespace UI
curveGenerator.SetControlPoints(p0, p1, p2, p3);
// 5. 将线头和线尾UI元素移动到对应的世界坐标位置使其与曲线的起始和结束对齐。
if (lineHead != null)
{
lineHead.transform.position = startWorldPos; // 将线头UI元素移动到起始点的世界坐标。
}
if (lineTail != null)
{
lineTail.transform.position = endWorldPos; // 将线尾UI元素移动到结束点的世界坐标。
}
if (lineHead != null) lineHead.transform.position = startWorldPos; // 将线头UI元素移动到起始点的世界坐标。
if (lineTail != null) lineTail.transform.position = endWorldPos; // 将线尾UI元素移动到结束点的世界坐标。
}
}
}
}