Files
daluandou/Assets/Scripts/投射物和特效/ParabolaFlyObject.cs
T
huadexuan 23c559d9f7 ```
feat(gameplay): 提升单位检测范围并添加法师属性

- 将所有单位的检测范围从默认值提升至100
- 为法师预制体添加护盾、等级等新属性
- 为法师添加暴击、吸血、伤害减免等战斗属性
- 更换法师弹丸预设并调整相关参数
- 添加锚点交战Z线控制功能
- 更新玩家数据中配备的召唤师技能
- 移除多余的纹理配置文件
```
2026-10-07 23:59:17 +08:00

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);
}
}