feat(gameplay): 提升单位检测范围并添加法师属性 - 将所有单位的检测范围从默认值提升至100 - 为法师预制体添加护盾、等级等新属性 - 为法师添加暴击、吸血、伤害减免等战斗属性 - 更换法师弹丸预设并调整相关参数 - 添加锚点交战Z线控制功能 - 更新玩家数据中配备的召唤师技能 - 移除多余的纹理配置文件 ```
66 lines
2.0 KiB
C#
66 lines
2.0 KiB
C#
using System;
|
|
using System.Collections;
|
|
using UnityEngine;
|
|
|
|
/// <summary>
|
|
/// 抛物线飞行投射物(支持终点落地下落特效)
|
|
/// </summary>
|
|
public class ParabolaFlyObject : MonoBehaviour
|
|
{
|
|
private Vector3 startPoint;
|
|
private Vector3 endPoint;
|
|
private float flyDuration;
|
|
private float heightPeak;
|
|
private Action onImpactCallback;
|
|
private GameObject impactEffectPrefab;
|
|
|
|
/// <summary>
|
|
/// 初始化抛物线飞行
|
|
/// </summary>
|
|
public void Launch(Vector3 start, Vector3 end, float duration, float height, GameObject impactPrefab = null, Action onImpact = null)
|
|
{
|
|
startPoint = start;
|
|
endPoint = end;
|
|
flyDuration = duration > 0.05f ? duration : 0.8f;
|
|
heightPeak = height;
|
|
impactEffectPrefab = impactPrefab;
|
|
onImpactCallback = onImpact;
|
|
|
|
transform.position = start;
|
|
StartCoroutine(FlyRoutine());
|
|
}
|
|
|
|
private IEnumerator FlyRoutine()
|
|
{
|
|
float elapsedTime = 0f;
|
|
|
|
while (elapsedTime < flyDuration)
|
|
{
|
|
elapsedTime += Time.deltaTime;
|
|
float t = Mathf.Clamp01(elapsedTime / flyDuration);
|
|
|
|
// 水平线性插值
|
|
Vector3 currentPos = Vector3.Lerp(startPoint, endPoint, t);
|
|
// 抛物线弧度 y 轴偏移:4 * h * t * (1 - t)
|
|
currentPos.y += 4f * heightPeak * t * (1f - t);
|
|
|
|
transform.position = currentPos;
|
|
yield return null;
|
|
}
|
|
|
|
transform.position = endPoint;
|
|
|
|
// 落地时生成冲击波特效 (明确带入 impactEffectPrefab.transform.rotation,保留 -90° 旋转使网格平铺地面)
|
|
if (impactEffectPrefab != null)
|
|
{
|
|
Quaternion rot = impactEffectPrefab.transform.rotation;
|
|
var effectGo = Instantiate(impactEffectPrefab, endPoint, rot);
|
|
effectGo.transform.rotation = rot; // 显式给实例化后的对象二次确认 rotation
|
|
Destroy(effectGo, 3.5f); // 3.5 秒后清理粒子
|
|
}
|
|
|
|
onImpactCallback?.Invoke();
|
|
Destroy(gameObject);
|
|
}
|
|
}
|