```
feat(StoneGolemSkill): 实现石巨人技能体系与荒野祭司技能设计 - 完成石巨人技能 StoneGolemSkill 的完整实现,包括 1~10 级技能阶梯 - 实现 1~2 级【大地震击】:3.5 米范围 160% 伤害 + 1.5 秒眩晕 - 实现 3~5 级【震荡强化】:伤害提升至 200%,范围扩大至 4.4 米 + 2 秒眩晕 - 实现 6~9 级【坚石护体】:获得 30% 最大生命值护盾,护盾期间霸体免控 - 实现 10 级【天崩地裂】:4.5 米范围 260% 伤害 + 3 米强力击退 + 2 秒眩晕 + 护盾提升至 45% 最大生命值 + 护盾期间受击减伤 35% - 添加护盾特效、冲击波动画、地面裂纹特效等视觉反馈 - 实
This commit is contained in:
1 parent
293347e685
commit
48aeec30e1
23 files changed
+24567
-47
No files matched your search
@@ -243,6 +243,7 @@ MonoBehaviour:
|
|||||||
indicatorHeight: 0.35
|
indicatorHeight: 0.35
|
||||||
stunIndicatorPrefab: {fileID: 2432573200162841629, guid: de288ea16be0c1544a4c6eb71e899570,
|
stunIndicatorPrefab: {fileID: 2432573200162841629, guid: de288ea16be0c1544a4c6eb71e899570,
|
||||||
type: 3}
|
type: 3}
|
||||||
|
isStunImmune: 0
|
||||||
--- !u!114 &8177884011524007471
|
--- !u!114 &8177884011524007471
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@@ -294,12 +295,14 @@ MonoBehaviour:
|
|||||||
m_Script: {fileID: 11500000, guid: 7e2a57697b0364e3889c18bf7a0cd09e, type: 3}
|
m_Script: {fileID: 11500000, guid: 7e2a57697b0364e3889c18bf7a0cd09e, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
skillDamage: 110
|
baseRadius: 3.5
|
||||||
skillRadius: 2
|
skillAnimationDuration: 2.3
|
||||||
stunDuration: 1
|
slamVfxPrefab: {fileID: 195466, guid: 906a88e8c5e24f1fbacd8675848fb29a, type: 3}
|
||||||
skillAnimationDuration: 0
|
|
||||||
shockwaveEffectPrefab: {fileID: 2197285705285267162, guid: c2264ab9308eec342a9aabba9e806a39,
|
shockwaveEffectPrefab: {fileID: 2197285705285267162, guid: c2264ab9308eec342a9aabba9e806a39,
|
||||||
type: 3}
|
type: 3}
|
||||||
|
groundCrackPrefab: {fileID: 1670833528851026573, guid: 066bbd566f6034806a29d1e0a6517df4,
|
||||||
|
type: 3}
|
||||||
|
shieldVfxPrefab: {fileID: 106386, guid: 439cf2d390c444d6b428b530f5b7eec3, type: 3}
|
||||||
--- !u!114 &297234283086109498
|
--- !u!114 &297234283086109498
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
|||||||
Binary file not shown.
@@ -1,65 +1,408 @@
|
|||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 石巨人技能:大地震击 / 天崩地裂体系(重装控制 / 护盾控场 · 1/3/6/10 级完整阶梯)
|
||||||
|
/// 1级【大地震击】:双拳猛砸地面引发冲击波,对周围 3.5 米造成 160% 物理伤害并【眩晕 1.5 秒】
|
||||||
|
/// 3级【震荡强化】:伤害提升至 200%,范围扩大 25% (4.4米),【眩晕时间延长至 2.0 秒】
|
||||||
|
/// 6级【坚石护体】:拍地瞬间获得相当于 30% 最大生命值的坚固护盾(MagicShieldBlue),护盾期间霸体免控,【依然保留 2.0 秒大范围眩晕】
|
||||||
|
/// 10级【天崩地裂】:双拳轰砸地面爆发全场重度地裂(GroundCrack),范围 4.5 米造成 260% 巨额物理伤害,
|
||||||
|
/// 【强力向外震退 3.0 米 + 眩晕 2.0 秒(击退加眩晕双重效果)】!护盾厚度提升至 45% 最大生命值,且护盾存在期间自身受到伤害降低 35%!
|
||||||
|
/// </summary>
|
||||||
public class StoneGolemSkill : UnitSkill
|
public class StoneGolemSkill : UnitSkill
|
||||||
{
|
{
|
||||||
[Header("地裂参数")]
|
[Header("技能基础配置")]
|
||||||
[Min(0f)]
|
[Tooltip("基础震荡波半径 (米)")]
|
||||||
public float skillDamage = 110f;
|
public float baseRadius = 3.5f;
|
||||||
|
|
||||||
[Min(0.1f)]
|
[Tooltip("技能动画完整时长 (秒)")]
|
||||||
public float skillRadius = 2f;
|
public float skillAnimationDuration = 2.3f;
|
||||||
|
|
||||||
[Min(0f)]
|
[Header("特效资源")]
|
||||||
public float stunDuration = 1f;
|
[Tooltip("砸地冲击波核心特效 (ToonBodySlam)")]
|
||||||
|
public GameObject slamVfxPrefab;
|
||||||
|
|
||||||
[Header("技能动画")]
|
[Tooltip("环形扩散光圈特效 (ShockwaveRing)")]
|
||||||
[Min(0f)]
|
|
||||||
public float skillAnimationDuration = 0f;
|
|
||||||
|
|
||||||
[Header("特效")]
|
|
||||||
public GameObject shockwaveEffectPrefab;
|
public GameObject shockwaveEffectPrefab;
|
||||||
|
|
||||||
private bool isSkillReady;
|
[Tooltip("地面重度地裂特效 (地裂.prefab)")]
|
||||||
|
public GameObject groundCrackPrefab;
|
||||||
|
|
||||||
public override void ReleaseSkill()
|
[Tooltip("坚石护体护盾特效 (MagicShieldBlue)")]
|
||||||
|
public GameObject shieldVfxPrefab;
|
||||||
|
|
||||||
|
private bool isSkillPending = false;
|
||||||
|
private GameObject activeShieldVfxInstance;
|
||||||
|
private Coroutine activeShieldCoroutine;
|
||||||
|
|
||||||
|
private void EnsureUnit()
|
||||||
{
|
{
|
||||||
if (unit == null)
|
if (unit == null)
|
||||||
{
|
{
|
||||||
return;
|
unit = GetComponent<UnitBase>();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Awake()
|
||||||
|
{
|
||||||
|
base.Awake();
|
||||||
|
EnsureUnit();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 当能量蓄满时触发:播放石巨人双拳高举蓄力猛砸地面动作
|
||||||
|
/// </summary>
|
||||||
|
public override void ReleaseSkill()
|
||||||
|
{
|
||||||
|
EnsureUnit();
|
||||||
|
if (unit == null) return;
|
||||||
|
|
||||||
|
WorldHealthBar healthBar = unit.GetComponent<WorldHealthBar>();
|
||||||
|
if (healthBar == null || healthBar.IsDead) return;
|
||||||
|
|
||||||
unit.FaceCurrentTarget(0f);
|
unit.FaceCurrentTarget(0f);
|
||||||
isSkillReady = true;
|
isSkillPending = true;
|
||||||
unit.PlaySkillAnimation(OnSkillFinished, skillAnimationDuration);
|
|
||||||
|
// 播放石巨人技能动作,由 OnSkillHit1 帧触发双拳砸地命中
|
||||||
|
unit.PlaySkillAnimation(OnSkillAnimationFinished, skillAnimationDuration);
|
||||||
|
Debug.Log($"<color=orange>【石巨人】释放技能【大地震击/天崩地裂】</color>,蓄力猛砸地面!");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 添加到地裂技能动画的命中帧;在命中帧结算伤害和眩晕。
|
/// <summary>
|
||||||
|
/// 动画命中帧方法:双拳猛砸接触地面的瞬间触发 (OnSkillHit1)
|
||||||
|
/// </summary>
|
||||||
public void OnSkillHit1()
|
public void OnSkillHit1()
|
||||||
{
|
{
|
||||||
if (!isSkillReady)
|
ExecuteGroundSlam();
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 生成扩散光圈特效
|
public void OnAttackEffect()
|
||||||
if (shockwaveEffectPrefab != null)
|
|
||||||
{
|
{
|
||||||
Vector3 effectPosition = unit.transform.position;
|
if (isSkillPending)
|
||||||
var effectObj = Instantiate(shockwaveEffectPrefab, effectPosition, shockwaveEffectPrefab.transform.rotation);
|
{
|
||||||
ShockwaveRing shockwave = effectObj.GetComponent<ShockwaveRing>();
|
ExecuteGroundSlam();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 执行砸地冲击波伤害、眩晕、击退与生成护盾
|
||||||
|
/// </summary>
|
||||||
|
private void ExecuteGroundSlam()
|
||||||
|
{
|
||||||
|
if (!isSkillPending) return;
|
||||||
|
isSkillPending = false;
|
||||||
|
|
||||||
|
EnsureUnit();
|
||||||
|
if (unit == null) return;
|
||||||
|
|
||||||
|
WorldHealthBar healthBar = unit.GetComponent<WorldHealthBar>();
|
||||||
|
if (healthBar == null || healthBar.IsDead) return;
|
||||||
|
|
||||||
|
int level = unit.level;
|
||||||
|
|
||||||
|
float currentRadius = baseRadius;
|
||||||
|
float damageMultiplier = 1.60f;
|
||||||
|
float stunDuration = 1.5f;
|
||||||
|
float knockbackDist = 0f;
|
||||||
|
|
||||||
|
if (level >= 10)
|
||||||
|
{
|
||||||
|
currentRadius = 4.5f;
|
||||||
|
damageMultiplier = 2.60f;
|
||||||
|
stunDuration = 2.0f; // 10级:眩晕 2.0 秒
|
||||||
|
knockbackDist = 3.0f; // 10级:击退加眩晕双重效果!
|
||||||
|
}
|
||||||
|
else if (level >= 3)
|
||||||
|
{
|
||||||
|
currentRadius = baseRadius * 1.25f; // 4.375 米
|
||||||
|
damageMultiplier = 2.00f;
|
||||||
|
stunDuration = 2.0f; // 3~9级:眩晕 2.0 秒,无击退
|
||||||
|
knockbackDist = 0f;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
currentRadius = baseRadius;
|
||||||
|
damageMultiplier = 1.60f;
|
||||||
|
stunDuration = 1.5f; // 1~2级:眩晕 1.5 秒,无击退
|
||||||
|
knockbackDist = 0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
float totalDamage = unit.attackPower * damageMultiplier;
|
||||||
|
|
||||||
|
// 1. 播放砸地冲击波特效 (ToonBodySlam + ShockwaveRing)
|
||||||
|
PlayShockwaveVfx(currentRadius, level >= 10);
|
||||||
|
|
||||||
|
// 2. 10级额外播放地面重度地裂特效 (GroundCrack)
|
||||||
|
if (level >= 10)
|
||||||
|
{
|
||||||
|
PlayGroundCrackVfx(currentRadius);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. 结算大范围物理伤害、眩晕控制,以及10级强力震退
|
||||||
|
ApplyAreaImpact(currentRadius, totalDamage, stunDuration, knockbackDist);
|
||||||
|
|
||||||
|
// 4. 6级+ 激活【坚石护体】护盾 (6级 30%, 10级 45% 最大血量)
|
||||||
|
float shieldRatio = level >= 10 ? 0.45f : (level >= 6 ? 0.30f : 0f);
|
||||||
|
if (shieldRatio > 0f)
|
||||||
|
{
|
||||||
|
float shieldAmount = healthBar.maxHealth * shieldRatio;
|
||||||
|
healthBar.AddShield(shieldAmount);
|
||||||
|
PlayShieldVfx();
|
||||||
|
|
||||||
|
if (activeShieldCoroutine != null)
|
||||||
|
{
|
||||||
|
StopCoroutine(activeShieldCoroutine);
|
||||||
|
}
|
||||||
|
activeShieldCoroutine = StartCoroutine(ShieldTimeoutRoutine(6.0f, shieldAmount));
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.Log($"<color=orange>【石巨人·大地震击】轰地!</color> 伤害: {totalDamage:F1} ({damageMultiplier * 100:F0}%), 半径: {currentRadius:F1}m, 眩晕: {stunDuration:F1}s, 震退: {knockbackDist:F1}m (等级: {level})");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void PlayShockwaveVfx(float radius, bool isUltimate)
|
||||||
|
{
|
||||||
|
// 1. 砸地核心冲击波特效 (ToonBodySlam: 气浪扩散 + 尘烟飞散 + 火星)
|
||||||
|
GameObject slamPrefab = slamVfxPrefab;
|
||||||
|
#if UNITY_EDITOR
|
||||||
|
if (slamPrefab == null)
|
||||||
|
{
|
||||||
|
slamPrefab = UnityEditor.AssetDatabase.LoadAssetAtPath<GameObject>("Assets/TJGeneratorLibEffects/Prefabs/Combat/Brawling/Toon/ToonBodySlam.prefab");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if (slamPrefab != null && unit != null)
|
||||||
|
{
|
||||||
|
Vector3 slamPos = unit.transform.position + unit.transform.forward * 0.8f;
|
||||||
|
slamPos.y = 0.05f;
|
||||||
|
var slamObj = Instantiate(slamPrefab, slamPos, Quaternion.identity);
|
||||||
|
slamObj.transform.localScale = Vector3.one * (radius / 2.2f);
|
||||||
|
Destroy(slamObj, 2.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. 地面扩散光圈 (ShockwaveRing)
|
||||||
|
GameObject ringPrefab = shockwaveEffectPrefab;
|
||||||
|
#if UNITY_EDITOR
|
||||||
|
if (ringPrefab == null)
|
||||||
|
{
|
||||||
|
ringPrefab = UnityEditor.AssetDatabase.LoadAssetAtPath<GameObject>("Assets/Prefabs/特效/扩散光圈/ShockwaveRing.prefab");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if (ringPrefab != null && unit != null)
|
||||||
|
{
|
||||||
|
Vector3 effectPos = unit.transform.position;
|
||||||
|
effectPos.y = 0.05f;
|
||||||
|
var effectObj = Instantiate(ringPrefab, effectPos, ringPrefab.transform.rotation);
|
||||||
|
var shockwave = effectObj.GetComponent<ShockwaveEffect>();
|
||||||
if (shockwave != null)
|
if (shockwave != null)
|
||||||
{
|
{
|
||||||
shockwave.Play();
|
Color ringColor = isUltimate ? new Color(1.0f, 0.45f, 0.15f, 1f) : new Color(0.9f, 0.7f, 0.35f, 1f);
|
||||||
|
shockwave.SetupEffect(radius, 0.8f, ringColor);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unit.ApplyAreaSkillDamage(skillRadius, skillDamage, false);
|
private void PlayGroundCrackVfx(float radius)
|
||||||
unit.ApplyAreaStun(skillRadius, stunDuration);
|
|
||||||
isSkillReady = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnSkillFinished()
|
|
||||||
{
|
{
|
||||||
isSkillReady = false;
|
GameObject prefab = groundCrackPrefab;
|
||||||
|
#if UNITY_EDITOR
|
||||||
|
if (prefab == null)
|
||||||
|
{
|
||||||
|
prefab = UnityEditor.AssetDatabase.LoadAssetAtPath<GameObject>("Assets/Prefabs/特效/地裂特效/地裂.prefab");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if (prefab != null && unit != null)
|
||||||
|
{
|
||||||
|
Vector3 crackPos = unit.transform.position;
|
||||||
|
crackPos.y = 0.06f;
|
||||||
|
var crackObj = Instantiate(prefab, crackPos, prefab.transform.rotation);
|
||||||
|
crackObj.transform.localScale = Vector3.one * (radius * 1.4f);
|
||||||
|
var groundCrack = crackObj.GetComponent<GroundCrack>();
|
||||||
|
if (groundCrack != null)
|
||||||
|
{
|
||||||
|
groundCrack.Play();
|
||||||
|
}
|
||||||
|
Destroy(crackObj, 3.0f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void PlayShieldVfx()
|
||||||
|
{
|
||||||
|
if (activeShieldVfxInstance != null)
|
||||||
|
{
|
||||||
|
Destroy(activeShieldVfxInstance);
|
||||||
|
}
|
||||||
|
|
||||||
|
GameObject prefab = shieldVfxPrefab;
|
||||||
|
#if UNITY_EDITOR
|
||||||
|
if (prefab == null)
|
||||||
|
{
|
||||||
|
prefab = UnityEditor.AssetDatabase.LoadAssetAtPath<GameObject>("Assets/TJGeneratorLibEffects/Prefabs/Combat/Magic/Shield/MagicShieldBlue.prefab");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if (prefab != null && unit != null)
|
||||||
|
{
|
||||||
|
// 调整护盾挂载高度与缩放:与盾卫视觉比例一致协调 (1.15倍),不再过于庞大
|
||||||
|
activeShieldVfxInstance = Instantiate(prefab, unit.transform.position + Vector3.up * 1.1f, Quaternion.identity);
|
||||||
|
activeShieldVfxInstance.transform.SetParent(unit.transform, true);
|
||||||
|
activeShieldVfxInstance.transform.localScale = Vector3.one * 1.15f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private IEnumerator ShieldTimeoutRoutine(float duration, float amount)
|
||||||
|
{
|
||||||
|
float timer = duration;
|
||||||
|
WorldHealthBar healthBar = unit != null ? unit.GetComponent<WorldHealthBar>() : null;
|
||||||
|
var status = unit != null ? unit.GetComponent<StatusEffectController>() : null;
|
||||||
|
|
||||||
|
// 护盾期间霸体免控
|
||||||
|
if (status != null)
|
||||||
|
{
|
||||||
|
status.isStunImmune = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (timer > 0f)
|
||||||
|
{
|
||||||
|
if (unit == null || healthBar == null || healthBar.IsDead || healthBar.currentShield <= 0f)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
timer -= Time.deltaTime;
|
||||||
|
yield return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 护盾解除恢复正常免控状态
|
||||||
|
if (status != null)
|
||||||
|
{
|
||||||
|
status.isStunImmune = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 超时或护盾清空时销毁护盾特效
|
||||||
|
if (activeShieldVfxInstance != null)
|
||||||
|
{
|
||||||
|
Destroy(activeShieldVfxInstance);
|
||||||
|
activeShieldVfxInstance = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 超时扣除护盾
|
||||||
|
if (healthBar != null && healthBar.currentShield > 0f && timer <= 0f)
|
||||||
|
{
|
||||||
|
healthBar.RemoveShield(amount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ApplyAreaImpact(float radius, float damage, float stunDuration, float knockback)
|
||||||
|
{
|
||||||
|
UnitTeam myTeam = unit.GetComponent<UnitTeam>();
|
||||||
|
if (myTeam == null) return;
|
||||||
|
|
||||||
|
float sqrRadius = radius * radius;
|
||||||
|
Vector3 myPos = unit.transform.position;
|
||||||
|
var allTeams = FindObjectsOfType<UnitTeam>();
|
||||||
|
HashSet<GameObject> hitRoots = new HashSet<GameObject>();
|
||||||
|
|
||||||
|
foreach (var t in allTeams)
|
||||||
|
{
|
||||||
|
if (t == null || !t.gameObject.activeInHierarchy || !myTeam.IsEnemy(t.gameObject)) continue;
|
||||||
|
|
||||||
|
GameObject opponent = t.gameObject;
|
||||||
|
if (opponent == unit.gameObject || opponent.transform.IsChildOf(unit.transform) || unit.transform.IsChildOf(opponent.transform)) continue;
|
||||||
|
|
||||||
|
Vector3 offset = opponent.transform.position - myPos;
|
||||||
|
offset.y = 0f;
|
||||||
|
if (offset.sqrMagnitude <= sqrRadius)
|
||||||
|
{
|
||||||
|
GameObject rootGo = opponent.transform.root.gameObject;
|
||||||
|
if (!hitRoots.Add(rootGo)) continue;
|
||||||
|
|
||||||
|
// 1. 伤害与眩晕结算
|
||||||
|
UnitBase targetUnit = opponent.GetComponentInParent<UnitBase>();
|
||||||
|
WorldHealthBar targetBar = opponent.GetComponentInParent<WorldHealthBar>();
|
||||||
|
|
||||||
|
if (targetUnit != null)
|
||||||
|
{
|
||||||
|
targetUnit.ReceiveDamage(damage, unit.gameObject);
|
||||||
|
if (stunDuration > 0f && targetUnit.IsAlive)
|
||||||
|
{
|
||||||
|
targetUnit.ApplyStun(stunDuration);
|
||||||
|
Debug.Log($"<color=yellow>【大地震击】眩晕生效!</color> 目标 {targetUnit.gameObject.name} 眩晕 {stunDuration:F1} 秒!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (targetBar != null && !targetBar.IsDead)
|
||||||
|
{
|
||||||
|
targetBar.TakeDamage(damage, unit.gameObject);
|
||||||
|
var status = opponent.GetComponentInParent<StatusEffectController>();
|
||||||
|
if (status != null && stunDuration > 0f)
|
||||||
|
{
|
||||||
|
status.ApplyStun(stunDuration);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. 10级强力向外震退 (与眩晕并存)
|
||||||
|
if (knockback > 0f)
|
||||||
|
{
|
||||||
|
Vector3 pushDir = offset.sqrMagnitude > 0.001f ? offset.normalized : unit.transform.forward;
|
||||||
|
ApplyKnockback(opponent, pushDir * knockback);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ApplyKnockback(GameObject victim, Vector3 displacement)
|
||||||
|
{
|
||||||
|
UnityEngine.AI.NavMeshAgent agent = victim.GetComponentInParent<UnityEngine.AI.NavMeshAgent>();
|
||||||
|
Transform targetTr = agent != null ? agent.transform : victim.transform;
|
||||||
|
Vector3 targetPos = targetTr.position + displacement;
|
||||||
|
|
||||||
|
if (UnityEngine.AI.NavMesh.SamplePosition(targetPos, out UnityEngine.AI.NavMeshHit hit, 2.0f, UnityEngine.AI.NavMesh.AllAreas))
|
||||||
|
{
|
||||||
|
targetPos = hit.position;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (agent != null && agent.enabled && agent.isOnNavMesh)
|
||||||
|
{
|
||||||
|
agent.Warp(targetPos);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
targetTr.position = targetPos;
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.Log($"<color=orange>【天崩地裂·排山倒海】!</color> 目标 {victim.name} 被强力震飞推开 {displacement.magnitude:F1} 米!");
|
||||||
|
}
|
||||||
|
|
||||||
|
public override float ModifyIncomingDamage(float damage, GameObject attacker)
|
||||||
|
{
|
||||||
|
EnsureUnit();
|
||||||
|
// 10级解锁:护盾存在期间自身受到伤害降低 35%
|
||||||
|
if (unit != null && unit.level >= 10)
|
||||||
|
{
|
||||||
|
WorldHealthBar healthBar = unit.GetComponent<WorldHealthBar>();
|
||||||
|
if (healthBar != null && healthBar.currentShield > 0f)
|
||||||
|
{
|
||||||
|
return damage * (1f - 0.35f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return damage;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnSkillAnimationFinished()
|
||||||
|
{
|
||||||
|
if (isSkillPending)
|
||||||
|
{
|
||||||
|
ExecuteGroundSlam(); // 容错兜底:动画结束若未触发命中帧,自动执行
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnDestroy()
|
||||||
|
{
|
||||||
|
if (activeShieldVfxInstance != null)
|
||||||
|
{
|
||||||
|
Destroy(activeShieldVfxInstance);
|
||||||
|
}
|
||||||
|
var status = unit != null ? unit.GetComponent<StatusEffectController>() : null;
|
||||||
|
if (status != null)
|
||||||
|
{
|
||||||
|
status.isStunImmune = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -143,7 +143,23 @@ public class StatusEffectController : MonoBehaviour
|
|||||||
|
|
||||||
private void EnsureIndicator()
|
private void EnsureIndicator()
|
||||||
{
|
{
|
||||||
if (stunIndicator != null || stunIndicatorPrefab == null)
|
if (stunIndicator != null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stunIndicatorPrefab == null)
|
||||||
|
{
|
||||||
|
stunIndicatorPrefab = Resources.Load<GameObject>("Prefabs/特效/眩晕头顶星星/眩晕星星粒子");
|
||||||
|
#if UNITY_EDITOR
|
||||||
|
if (stunIndicatorPrefab == null)
|
||||||
|
{
|
||||||
|
stunIndicatorPrefab = UnityEditor.AssetDatabase.LoadAssetAtPath<GameObject>("Assets/Prefabs/特效/眩晕头顶星星/眩晕星星粒子.prefab");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stunIndicatorPrefab == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,20 @@
|
|||||||
%YAML 1.1
|
%YAML 1.1
|
||||||
%TAG !u! tag:unity3d.com,2011:
|
%TAG !u! tag:yousandi.cn,2023:
|
||||||
--- !u!21 &2100000
|
--- !u!21 &2100000
|
||||||
Material:
|
Material:
|
||||||
serializedVersion: 6
|
serializedVersion: 8
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
m_PrefabParentObject: {fileID: 0}
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
m_PrefabInternal: {fileID: 0}
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_Name: cloud_2x2_soft_AB
|
m_Name: cloud_2x2_soft_AB
|
||||||
m_Shader: {fileID: 211, guid: 0000000000000000f000000000000000, type: 0}
|
m_Shader: {fileID: 211, guid: 0000000000000000f000000000000000, type: 0}
|
||||||
m_ShaderKeywords: _ALPHABLEND_ON _FADING_ON
|
m_Parent: {fileID: 0}
|
||||||
|
m_ModifiedSerializedProperties: 0
|
||||||
|
m_ValidKeywords:
|
||||||
|
- _ALPHABLEND_ON
|
||||||
|
- _FADING_ON
|
||||||
|
m_InvalidKeywords: []
|
||||||
m_LightmapFlags: 0
|
m_LightmapFlags: 0
|
||||||
m_EnableInstancingVariants: 0
|
m_EnableInstancingVariants: 0
|
||||||
m_DoubleSidedGI: 0
|
m_DoubleSidedGI: 0
|
||||||
@@ -16,7 +22,8 @@ Material:
|
|||||||
stringTagMap:
|
stringTagMap:
|
||||||
RenderType: Transparent
|
RenderType: Transparent
|
||||||
disabledShaderPasses:
|
disabledShaderPasses:
|
||||||
- ALWAYS
|
- GRABPASS
|
||||||
|
m_LockedProperties:
|
||||||
m_SavedProperties:
|
m_SavedProperties:
|
||||||
serializedVersion: 3
|
serializedVersion: 3
|
||||||
m_TexEnvs:
|
m_TexEnvs:
|
||||||
@@ -32,6 +39,7 @@ Material:
|
|||||||
m_Texture: {fileID: 2800000, guid: 2415a61019924a3f98520fa4a2266920, type: 3}
|
m_Texture: {fileID: 2800000, guid: 2415a61019924a3f98520fa4a2266920, type: 3}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
m_Offset: {x: 0, y: 0}
|
m_Offset: {x: 0, y: 0}
|
||||||
|
m_Ints: []
|
||||||
m_Floats:
|
m_Floats:
|
||||||
- _BlendOp: 0
|
- _BlendOp: 0
|
||||||
- _BumpScale: 1
|
- _BumpScale: 1
|
||||||
@@ -63,3 +71,4 @@ Material:
|
|||||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||||
- _SoftParticleFadeParams: {r: 0, g: 1, b: 0, a: 0}
|
- _SoftParticleFadeParams: {r: 0, g: 1, b: 0, a: 0}
|
||||||
- _TintColor: {r: 0.5, g: 0.5, b: 0.5, a: 0.5}
|
- _TintColor: {r: 0.5, g: 0.5, b: 0.5, a: 0.5}
|
||||||
|
m_BuildTextureStacks: []
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:yousandi.cn,2023:
|
||||||
|
--- !u!21 &2100000
|
||||||
|
Material:
|
||||||
|
serializedVersion: 8
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_Name: aura_punch_ADD
|
||||||
|
m_Shader: {fileID: 211, guid: 0000000000000000f000000000000000, type: 0}
|
||||||
|
m_Parent: {fileID: 0}
|
||||||
|
m_ModifiedSerializedProperties: 0
|
||||||
|
m_ValidKeywords:
|
||||||
|
- _ALPHABLEND_ON
|
||||||
|
m_InvalidKeywords: []
|
||||||
|
m_LightmapFlags: 0
|
||||||
|
m_EnableInstancingVariants: 0
|
||||||
|
m_DoubleSidedGI: 0
|
||||||
|
m_CustomRenderQueue: 3000
|
||||||
|
stringTagMap:
|
||||||
|
RenderType: Transparent
|
||||||
|
disabledShaderPasses:
|
||||||
|
- GRABPASS
|
||||||
|
m_LockedProperties:
|
||||||
|
m_SavedProperties:
|
||||||
|
serializedVersion: 3
|
||||||
|
m_TexEnvs:
|
||||||
|
- _BumpMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _EmissionMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _MainTex:
|
||||||
|
m_Texture: {fileID: 2800000, guid: d084c1b5a2374cc5a82258a8908ec4fd, type: 3}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
m_Ints: []
|
||||||
|
m_Floats:
|
||||||
|
- _BlendOp: 0
|
||||||
|
- _BumpScale: 1
|
||||||
|
- _CameraFadingEnabled: 0
|
||||||
|
- _CameraFarFadeDistance: 2
|
||||||
|
- _CameraNearFadeDistance: 1
|
||||||
|
- _ColorMode: 0
|
||||||
|
- _Cull: 0
|
||||||
|
- _Cutoff: 0.5
|
||||||
|
- _DistortionBlend: 0.5
|
||||||
|
- _DistortionEnabled: 0
|
||||||
|
- _DistortionStrength: 1
|
||||||
|
- _DistortionStrengthScaled: 0
|
||||||
|
- _DstBlend: 1
|
||||||
|
- _EmissionEnabled: 0
|
||||||
|
- _FlipbookMode: 0
|
||||||
|
- _InvFade: 3
|
||||||
|
- _LightingEnabled: 0
|
||||||
|
- _Mode: 4
|
||||||
|
- _SoftParticlesEnabled: 0
|
||||||
|
- _SoftParticlesFarFadeDistance: 1
|
||||||
|
- _SoftParticlesNearFadeDistance: 0
|
||||||
|
- _SrcBlend: 5
|
||||||
|
- _ZWrite: 0
|
||||||
|
m_Colors:
|
||||||
|
- _CameraFadeParams: {r: 0, g: Infinity, b: 0, a: 0}
|
||||||
|
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _ColorAddSubDiff: {r: 0, g: 0, b: 0, a: 0}
|
||||||
|
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||||
|
- _SoftParticleFadeParams: {r: 0, g: 0, b: 0, a: 0}
|
||||||
|
- _TintColor: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 0.5}
|
||||||
|
m_BuildTextureStacks: []
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 5014441e87bd413f833a397c368ed483
|
||||||
|
timeCreated: 1455804790
|
||||||
|
licenseType: Store
|
||||||
|
NativeFormatImporter:
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:yousandi.cn,2023:
|
||||||
|
--- !u!21 &2100000
|
||||||
|
Material:
|
||||||
|
serializedVersion: 8
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_Name: grab2_ADD
|
||||||
|
m_Shader: {fileID: 211, guid: 0000000000000000f000000000000000, type: 0}
|
||||||
|
m_Parent: {fileID: 0}
|
||||||
|
m_ModifiedSerializedProperties: 0
|
||||||
|
m_ValidKeywords:
|
||||||
|
- _ALPHABLEND_ON
|
||||||
|
- _FADING_ON
|
||||||
|
m_InvalidKeywords: []
|
||||||
|
m_LightmapFlags: 0
|
||||||
|
m_EnableInstancingVariants: 0
|
||||||
|
m_DoubleSidedGI: 0
|
||||||
|
m_CustomRenderQueue: 3000
|
||||||
|
stringTagMap:
|
||||||
|
RenderType: Transparent
|
||||||
|
disabledShaderPasses:
|
||||||
|
- GRABPASS
|
||||||
|
m_LockedProperties:
|
||||||
|
m_SavedProperties:
|
||||||
|
serializedVersion: 3
|
||||||
|
m_TexEnvs:
|
||||||
|
- _BumpMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _EmissionMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _MainTex:
|
||||||
|
m_Texture: {fileID: 2800000, guid: d9e984540f9a49c7869df85911684aa8, type: 3}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
m_Ints: []
|
||||||
|
m_Floats:
|
||||||
|
- _BlendOp: 0
|
||||||
|
- _BumpScale: 1
|
||||||
|
- _CameraFadingEnabled: 0
|
||||||
|
- _CameraFarFadeDistance: 2
|
||||||
|
- _CameraNearFadeDistance: 1
|
||||||
|
- _ColorMode: 0
|
||||||
|
- _Cull: 0
|
||||||
|
- _Cutoff: 0.5
|
||||||
|
- _DistortionBlend: 0.5
|
||||||
|
- _DistortionEnabled: 0
|
||||||
|
- _DistortionStrength: 1
|
||||||
|
- _DistortionStrengthScaled: 0
|
||||||
|
- _DstBlend: 1
|
||||||
|
- _EmissionEnabled: 0
|
||||||
|
- _FlipbookMode: 0
|
||||||
|
- _InvFade: 3
|
||||||
|
- _LightingEnabled: 0
|
||||||
|
- _Mode: 4
|
||||||
|
- _SoftParticlesEnabled: 1
|
||||||
|
- _SoftParticlesFarFadeDistance: 1
|
||||||
|
- _SoftParticlesNearFadeDistance: 0
|
||||||
|
- _SrcBlend: 5
|
||||||
|
- _ZWrite: 0
|
||||||
|
m_Colors:
|
||||||
|
- _CameraFadeParams: {r: 0, g: Infinity, b: 0, a: 0}
|
||||||
|
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _ColorAddSubDiff: {r: 0, g: 0, b: 0, a: 0}
|
||||||
|
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||||
|
- _SoftParticleFadeParams: {r: 0, g: 1, b: 0, a: 0}
|
||||||
|
- _TintColor: {r: 0.5, g: 0.5, b: 0.5, a: 0.5}
|
||||||
|
m_BuildTextureStacks: []
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 7dcc2a885f5043eeafe672ca2327287f
|
||||||
|
timeCreated: 1454683415
|
||||||
|
licenseType: Store
|
||||||
|
NativeFormatImporter:
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,83 @@
|
|||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:yousandi.cn,2023:
|
||||||
|
--- !u!21 &2100000
|
||||||
|
Material:
|
||||||
|
serializedVersion: 8
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_Name: verticalglow02
|
||||||
|
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
|
||||||
|
m_Parent: {fileID: 0}
|
||||||
|
m_ModifiedSerializedProperties: 0
|
||||||
|
m_ValidKeywords: []
|
||||||
|
m_InvalidKeywords: []
|
||||||
|
m_LightmapFlags: 4
|
||||||
|
m_EnableInstancingVariants: 0
|
||||||
|
m_DoubleSidedGI: 0
|
||||||
|
m_CustomRenderQueue: -1
|
||||||
|
stringTagMap: {}
|
||||||
|
disabledShaderPasses: []
|
||||||
|
m_LockedProperties:
|
||||||
|
m_SavedProperties:
|
||||||
|
serializedVersion: 3
|
||||||
|
m_TexEnvs:
|
||||||
|
- _BumpMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _DetailAlbedoMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _DetailMask:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _DetailNormalMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _EmissionMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _MainTex:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _MetallicGlossMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _OcclusionMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _ParallaxMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
m_Ints: []
|
||||||
|
m_Floats:
|
||||||
|
- _BumpScale: 1
|
||||||
|
- _Cutoff: 0.5
|
||||||
|
- _DetailNormalMapScale: 1
|
||||||
|
- _DstBlend: 0
|
||||||
|
- _GlossMapScale: 1
|
||||||
|
- _Glossiness: 0
|
||||||
|
- _GlossyReflections: 1
|
||||||
|
- _Metallic: 0
|
||||||
|
- _Mode: 0
|
||||||
|
- _OcclusionStrength: 1
|
||||||
|
- _Parallax: 0.02
|
||||||
|
- _SmoothnessTextureChannel: 0
|
||||||
|
- _SpecularHighlights: 1
|
||||||
|
- _SrcBlend: 1
|
||||||
|
- _UVSec: 0
|
||||||
|
- _ZWrite: 1
|
||||||
|
m_Colors:
|
||||||
|
- _Color: {r: 0.588, g: 0.588, b: 0.588, a: 1}
|
||||||
|
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||||
|
m_BuildTextureStacks: []
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: Wi5Osnn4BnoQRvxvdSsr5ot71KhJTCPo4aQ7FAQp1tSp9wvEGLK0c/4=
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 2100000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
Binary file not shown.
@@ -0,0 +1,71 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 89212bda941b449098e17e91d8422c3b
|
||||||
|
timeCreated: 1447426227
|
||||||
|
licenseType: Store
|
||||||
|
ModelImporter:
|
||||||
|
serializedVersion: 18
|
||||||
|
fileIDToRecycleName:
|
||||||
|
100000: //RootNode
|
||||||
|
400000: //RootNode
|
||||||
|
2300000: //RootNode
|
||||||
|
3300000: //RootNode
|
||||||
|
4300000: Cylinder001
|
||||||
|
9500000: //RootNode
|
||||||
|
materials:
|
||||||
|
importMaterials: 1
|
||||||
|
materialName: 0
|
||||||
|
materialSearch: 1
|
||||||
|
animations:
|
||||||
|
legacyGenerateAnimations: 4
|
||||||
|
bakeSimulation: 0
|
||||||
|
optimizeGameObjects: 0
|
||||||
|
motionNodeName:
|
||||||
|
animationCompression: 1
|
||||||
|
animationRotationError: .5
|
||||||
|
animationPositionError: .5
|
||||||
|
animationScaleError: .5
|
||||||
|
animationWrapMode: 0
|
||||||
|
extraExposedTransformPaths: []
|
||||||
|
clipAnimations: []
|
||||||
|
isReadable: 1
|
||||||
|
meshes:
|
||||||
|
lODScreenPercentages: []
|
||||||
|
globalScale: 1
|
||||||
|
meshCompression: 0
|
||||||
|
addColliders: 0
|
||||||
|
importBlendShapes: 1
|
||||||
|
swapUVChannels: 0
|
||||||
|
generateSecondaryUV: 0
|
||||||
|
useFileUnits: 1
|
||||||
|
optimizeMeshForGPU: 1
|
||||||
|
keepQuads: 0
|
||||||
|
weldVertices: 1
|
||||||
|
secondaryUVAngleDistortion: 8
|
||||||
|
secondaryUVAreaDistortion: 15.000001
|
||||||
|
secondaryUVHardAngle: 88
|
||||||
|
secondaryUVPackMargin: 4
|
||||||
|
useFileScale: 1
|
||||||
|
tangentSpace:
|
||||||
|
normalSmoothAngle: 60
|
||||||
|
splitTangentsAcrossUV: 1
|
||||||
|
normalImportMode: 0
|
||||||
|
tangentImportMode: 1
|
||||||
|
importAnimation: 1
|
||||||
|
copyAvatar: 0
|
||||||
|
humanDescription:
|
||||||
|
human: []
|
||||||
|
skeleton: []
|
||||||
|
armTwist: .5
|
||||||
|
foreArmTwist: .5
|
||||||
|
upperLegTwist: .5
|
||||||
|
legTwist: .5
|
||||||
|
armStretch: .0500000007
|
||||||
|
legStretch: .0500000007
|
||||||
|
feetSpacing: 0
|
||||||
|
rootMotionBoneName:
|
||||||
|
lastHumanDescriptionAvatarSource: {instanceID: 0}
|
||||||
|
animationType: 2
|
||||||
|
additionalBone: 0
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: BngY4y6uVS5QIh87GouQlKzo0/YmICsitENBbz620ih/Yqvchpo/W/E=
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: CXpNtnukUXpcNTIv6+qwcYWc4lb//9v3RE7GwTnXKxR57fipx2zu8AI=
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 906a88e8c5e24f1fbacd8675848fb29a
|
||||||
|
timeCreated: 1455890641
|
||||||
|
licenseType: Store
|
||||||
|
NativeFormatImporter:
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 4.5 KiB |
@@ -0,0 +1,57 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: d084c1b5a2374cc5a82258a8908ec4fd
|
||||||
|
timeCreated: 1455804786
|
||||||
|
licenseType: Store
|
||||||
|
TextureImporter:
|
||||||
|
fileIDToRecycleName: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
mipmaps:
|
||||||
|
mipMapMode: 0
|
||||||
|
enableMipMap: 1
|
||||||
|
linearTexture: 0
|
||||||
|
correctGamma: 0
|
||||||
|
fadeOut: 0
|
||||||
|
borderMipMap: 0
|
||||||
|
mipMapFadeDistanceStart: 1
|
||||||
|
mipMapFadeDistanceEnd: 3
|
||||||
|
bumpmap:
|
||||||
|
convertToNormalMap: 0
|
||||||
|
externalNormalMap: 0
|
||||||
|
heightScale: 0.25
|
||||||
|
normalMapFilter: 0
|
||||||
|
isReadable: 0
|
||||||
|
grayScaleToAlpha: 0
|
||||||
|
generateCubemap: 0
|
||||||
|
cubemapConvolution: 0
|
||||||
|
cubemapConvolutionSteps: 7
|
||||||
|
cubemapConvolutionExponent: 1.5
|
||||||
|
seamlessCubemap: 0
|
||||||
|
textureFormat: -1
|
||||||
|
maxTextureSize: 2048
|
||||||
|
textureSettings:
|
||||||
|
filterMode: -1
|
||||||
|
aniso: -1
|
||||||
|
mipBias: -1
|
||||||
|
wrapMode: -1
|
||||||
|
nPOTScale: 1
|
||||||
|
lightmap: 0
|
||||||
|
rGBM: 0
|
||||||
|
compressionQuality: 50
|
||||||
|
allowsAlphaSplitting: 0
|
||||||
|
spriteMode: 0
|
||||||
|
spriteExtrude: 1
|
||||||
|
spriteMeshType: 1
|
||||||
|
alignment: 0
|
||||||
|
spritePivot: {x: 0.5, y: 0.5}
|
||||||
|
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
spritePixelsToUnits: 100
|
||||||
|
alphaIsTransparency: 1
|
||||||
|
textureType: -1
|
||||||
|
buildTargetSettings: []
|
||||||
|
spriteSheet:
|
||||||
|
sprites: []
|
||||||
|
outline: []
|
||||||
|
spritePackingTag:
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 85 KiB |
@@ -0,0 +1,57 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: d9e984540f9a49c7869df85911684aa8
|
||||||
|
timeCreated: 1454682949
|
||||||
|
licenseType: Store
|
||||||
|
TextureImporter:
|
||||||
|
fileIDToRecycleName: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
mipmaps:
|
||||||
|
mipMapMode: 0
|
||||||
|
enableMipMap: 1
|
||||||
|
linearTexture: 0
|
||||||
|
correctGamma: 0
|
||||||
|
fadeOut: 0
|
||||||
|
borderMipMap: 0
|
||||||
|
mipMapFadeDistanceStart: 1
|
||||||
|
mipMapFadeDistanceEnd: 3
|
||||||
|
bumpmap:
|
||||||
|
convertToNormalMap: 0
|
||||||
|
externalNormalMap: 0
|
||||||
|
heightScale: 0.25
|
||||||
|
normalMapFilter: 0
|
||||||
|
isReadable: 0
|
||||||
|
grayScaleToAlpha: 0
|
||||||
|
generateCubemap: 0
|
||||||
|
cubemapConvolution: 0
|
||||||
|
cubemapConvolutionSteps: 7
|
||||||
|
cubemapConvolutionExponent: 1.5
|
||||||
|
seamlessCubemap: 0
|
||||||
|
textureFormat: -1
|
||||||
|
maxTextureSize: 2048
|
||||||
|
textureSettings:
|
||||||
|
filterMode: -1
|
||||||
|
aniso: -1
|
||||||
|
mipBias: -1
|
||||||
|
wrapMode: -1
|
||||||
|
nPOTScale: 1
|
||||||
|
lightmap: 0
|
||||||
|
rGBM: 0
|
||||||
|
compressionQuality: 50
|
||||||
|
allowsAlphaSplitting: 0
|
||||||
|
spriteMode: 0
|
||||||
|
spriteExtrude: 1
|
||||||
|
spriteMeshType: 1
|
||||||
|
alignment: 0
|
||||||
|
spritePivot: {x: 0.5, y: 0.5}
|
||||||
|
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
spritePixelsToUnits: 100
|
||||||
|
alphaIsTransparency: 1
|
||||||
|
textureType: -1
|
||||||
|
buildTargetSettings: []
|
||||||
|
spriteSheet:
|
||||||
|
sprites: []
|
||||||
|
outline: []
|
||||||
|
spritePackingTag:
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -165,6 +165,8 @@
|
|||||||
- [2026-10-14 21:05:29] 2026-10-14 狂暴狼人技能规范更新:1. 技能确立为原地利爪撕裂(无位移飞扑),技能名称统一为【利爪撕裂】;2. 去除6级扇形小范围撕扯,各等级始终保持纯粹单体撕裂与流血;3. 6级专注保留【背水一战】(自身血量每降低10%,受击减免+3%、吸血+5%)。文档与WerewolfSkill.cs代码已完全同步。
|
- [2026-10-14 21:05:29] 2026-10-14 狂暴狼人技能规范更新:1. 技能确立为原地利爪撕裂(无位移飞扑),技能名称统一为【利爪撕裂】;2. 去除6级扇形小范围撕扯,各等级始终保持纯粹单体撕裂与流血;3. 6级专注保留【背水一战】(自身血量每降低10%,受击减免+3%、吸血+5%)。文档与WerewolfSkill.cs代码已完全同步。
|
||||||
- [2026-10-14 22:52:23] 2026-10-14 关卡章节与教学副本体系定稿:1. 独立新手教学区(序章5关),英雄在战场出现,通关开宝箱逐关解锁;2. 正式章节每章固定10关,每关6~8波小怪+2~3名敌方英雄压阵,第10关为大Boss关;3. 每关通关宝箱定向产出特定英雄碎片;4. 关卡支持1~10阶难度逐级解锁,仅通过怪物等级Level与数量密度缩放实现低成本超长游戏寿命。已同步写入《召唤之战-核心玩法塔防版.md》。
|
- [2026-10-14 22:52:23] 2026-10-14 关卡章节与教学副本体系定稿:1. 独立新手教学区(序章5关),英雄在战场出现,通关开宝箱逐关解锁;2. 正式章节每章固定10关,每关6~8波小怪+2~3名敌方英雄压阵,第10关为大Boss关;3. 每关通关宝箱定向产出特定英雄碎片;4. 关卡支持1~10阶难度逐级解锁,仅通过怪物等级Level与数量密度缩放实现低成本超长游戏寿命。已同步写入《召唤之战-核心玩法塔防版.md》。
|
||||||
- [2026-10-15 20:27:34] 2026-10-15 优化石巨人技能设计:彻底剔除降低移速等鸡肋机制,10级大招【天崩地裂】改为260%巨额伤害+强力击退震飞3米(推开防线)+45%最大血量护盾+35%受击减伤,强化纯重装控场防线作用。文档已同步更新。
|
- [2026-10-15 20:27:34] 2026-10-15 优化石巨人技能设计:彻底剔除降低移速等鸡肋机制,10级大招【天崩地裂】改为260%巨额伤害+强力击退震飞3米(推开防线)+45%最大血量护盾+35%受击减伤,强化纯重装控场防线作用。文档已同步更新。
|
||||||
|
- [2026-10-16 10:56:38] 2026-10-16 石巨人技能 StoneGolemSkill 实现完成:1~9级附带范围眩晕(1.5s~2s),10级为3m强力击退+2s眩晕双重效果;护盾特效缩放微调为1.15x,砸地接入ToonBodySlam冲击波烟尘粒子,StatusEffectController自动兜底加载眩晕星星粒子。
|
||||||
|
- [2026-10-16 11:30:36] 2026-10-16 补齐第二章英雄荒野祭司(治疗型辅助)技能体系:1级【先祖愈合】急救单体残血友军(220%+残血额外30%);3级数值提升至280%+减伤15%;6级【生命传导】质变为弹射治疗链(弹射2人)+3秒草木回春;10级【远古图腾圣域】阵地插生命图腾(每秒回血+全队25%减伤+1次免死)。文档已同步。
|
||||||
|
|
||||||
### Reference
|
### Reference
|
||||||
- [2026-09-09 12:23:17] 飞行物脚本 Projectile.cs 负责锁敌追踪、碰撞检测和伤害结算。箭矢预制体 ArrowProjectile_White.prefab 已配置 Projectile 组件和 CapsuleCollider(Is Trigger)。远程单位需在攻击动画松弦帧添加 OnAttackEffect Event,并在 UnitBase 中设置 attackType=RangedProjectile、projectilePrefab、projectileSpawnPoint。
|
- [2026-09-09 12:23:17] 飞行物脚本 Projectile.cs 负责锁敌追踪、碰撞检测和伤害结算。箭矢预制体 ArrowProjectile_White.prefab 已配置 Projectile 组件和 CapsuleCollider(Is Trigger)。远程单位需在攻击动画松弦帧添加 OnAttackEffect Event,并在 UnitBase 中设置 attackType=RangedProjectile、projectilePrefab、projectileSpawnPoint。
|
||||||
+16
-2
@@ -78,6 +78,7 @@
|
|||||||
| 荒野猎手 | 正常人形 | 远程重矛、后排狙杀 | 待更新模型(原弓箭猎人) |
|
| 荒野猎手 | 正常人形 | 远程重矛、后排狙杀 | 待更新模型(原弓箭猎人) |
|
||||||
| 狂暴狼人 | 人形兽类 | 吸血战坦、前排持续续航 | 已有 Prefab |
|
| 狂暴狼人 | 人形兽类 | 吸血战坦、前排持续续航 | 已有 Prefab |
|
||||||
| 石巨人 | 大体型构造体 | 重型前排、范围控制 | 已有 Prefab |
|
| 石巨人 | 大体型构造体 | 重型前排、范围控制 | 已有 Prefab |
|
||||||
|
| 荒野祭司 | 正常人形 | 远程治疗、团队急救与增益 | 待接入 Prefab |
|
||||||
|
|
||||||
### 英雄数值原则
|
### 英雄数值原则
|
||||||
|
|
||||||
@@ -200,7 +201,7 @@ CharacterData 基础属性
|
|||||||
- 狂暴狼人:吸血战坦,原地利爪撕裂重创目标并狂暴,依靠高额普攻吸血与残血减伤在前排屹立不倒。
|
- 狂暴狼人:吸血战坦,原地利爪撕裂重创目标并狂暴,依靠高额普攻吸血与残血减伤在前排屹立不倒。
|
||||||
- 荒野猎手:远程重矛,锁定大范围内最远距离的敌方目标,后排高伤狙杀与强力后仰击退(原弓箭猎人)。
|
- 荒野猎手:远程重矛,锁定大范围内最远距离的敌方目标,后排高伤狙杀与强力后仰击退(原弓箭猎人)。
|
||||||
- 石巨人:高生命重型前排,拥有范围控制能力。
|
- 石巨人:高生命重型前排,拥有范围控制能力。
|
||||||
- 荒野祭司:辅助治疗和范围支援,后续制作。
|
- 荒野祭司:远程治疗辅助,单体急救、弹射治疗链与远古图腾圣域(待接入 Prefab)。
|
||||||
- 荒野之王:大型精英前排,作为章节 Boss 或高阶英雄,后续制作。
|
- 荒野之王:大型精英前排,作为章节 Boss 或高阶英雄,后续制作。
|
||||||
|
|
||||||
### 第二章英雄技能阶梯解锁表
|
### 第二章英雄技能阶梯解锁表
|
||||||
@@ -232,6 +233,15 @@ CharacterData 基础属性
|
|||||||
| **6 级 · 机制质变 · 核心好玩点** | **坚石护体**:重拍地面击碎岩石吸附自身,拍地瞬间**获得相当于 30% 最大生命值的坚固护盾**(挂 `MagicShieldBlue`),护盾期间霸体免控! |
|
| **6 级 · 机制质变 · 核心好玩点** | **坚石护体**:重拍地面击碎岩石吸附自身,拍地瞬间**获得相当于 30% 最大生命值的坚固护盾**(挂 `MagicShieldBlue`),护盾期间霸体免控! |
|
||||||
| **10 级 · 终极质变大招 · 攻防高光** | **天崩地裂**:双拳轰砸地面爆发全场重度地裂,对周围 4.5 米所有敌人造成 **260% 巨额物理伤害**,并激起排山倒海的冲击波**将范围内所有敌人强力向外震退 3.0 米**(彻底推离防线,打乱敌军阵型)!同时护盾厚度额外提升至 **45% 最大生命值**,且护盾存在期间自身**受到伤害降低 35%**! |
|
| **10 级 · 终极质变大招 · 攻防高光** | **天崩地裂**:双拳轰砸地面爆发全场重度地裂,对周围 4.5 米所有敌人造成 **260% 巨额物理伤害**,并激起排山倒海的冲击波**将范围内所有敌人强力向外震退 3.0 米**(彻底推离防线,打乱敌军阵型)!同时护盾厚度额外提升至 **45% 最大生命值**,且护盾存在期间自身**受到伤害降低 35%**! |
|
||||||
|
|
||||||
|
#### 荒野祭司(远程治疗 / 团队辅助)
|
||||||
|
|
||||||
|
| 阶梯节点 | 技能效果 |
|
||||||
|
|---|---|
|
||||||
|
| **1 级 · 基础解锁** | **先祖愈合**:高举祭祀法杖引动自然生机,锁定全场**生命值百分比最低的友方英雄**,降下愈合之光(`HealNova`)瞬间回复相当于祭司攻击力 **220% 的生命值**;若目标生命值低于 40%,触发急救效果,治疗量额外提升 30%! |
|
||||||
|
| **3 级 · 数值强化** | 基础治疗量提升至 **280%**,急救触发阈值放宽至低于 50% 生命值且急救治疗提升至 50%!愈合附带自然微风,使受治疗目标在后续 3 秒内受到伤害降低 15%! |
|
||||||
|
| **6 级 · 机制质变 · 核心好玩点** | **生命传导(治疗链)**:愈合之光在救治首要目标后,**自动向外弹射折射给周围 2 名受伤的友方单位**(折射造成 60% 治疗量,通过 `cureBall` 连环飞射);并在受治疗单位脚下生成持续 3 秒的【草木回春】(每秒持续恢复 4% 最大生命值)!从单体急救质变为强力群抬! |
|
||||||
|
| **10 级 · 终极质变大招 · 攻防高光** | **远古图腾圣域**:施法在友方阵地中心拔地升起一座**【先祖生命图腾】(持续 6 秒)**!图腾每秒向全场友方英雄激发生命脉冲(每秒群体回血 120 点),**且图腾存在期间全场友方英雄受到的所有伤害降低 25%**;若场上有友方英雄在此期间受到致命伤害,图腾立即碎裂自毁,为其**抵挡该次死劫并瞬间回血 30%**(保底免死护航,每局限触发 1 次)! |
|
||||||
|
|
||||||
#### 蓝色怪物(控场反制 / 元素护盾)
|
#### 蓝色怪物(控场反制 / 元素护盾)
|
||||||
|
|
||||||
| 阶梯节点 | 技能效果 |
|
| 阶梯节点 | 技能效果 |
|
||||||
@@ -256,7 +266,7 @@ CharacterData 基础属性
|
|||||||
- 嗜血撕咬:重创敌人吸血,并激活高额普攻吸血与攻速。
|
- 嗜血撕咬:重创敌人吸血,并激活高额普攻吸血与攻速。
|
||||||
- 穿心猎矛:超远距离狙杀最远敌人,距离越远伤害越高。
|
- 穿心猎矛:超远距离狙杀最远敌人,距离越远伤害越高。
|
||||||
- 地裂:范围伤害并造成控制与击退。
|
- 地裂:范围伤害并造成控制与击退。
|
||||||
- 治疗波:治疗范围内友军。
|
- 先祖愈合:急救单体残血友军,进阶弹射治疗链与远古图腾圣域。
|
||||||
- 冲击波:直线伤害并击退。
|
- 冲击波:直线伤害并击退。
|
||||||
|
|
||||||
## 五、第三章:沉没沼泽
|
## 五、第三章:沉没沼泽
|
||||||
@@ -418,6 +428,10 @@ UnitBase
|
|||||||
- **城堡法师火球攻击/技能**:
|
- **城堡法师火球攻击/技能**:
|
||||||
- **火球飞弹**:`Assets/TJGeneratorLibEffects/Prefabs/Combat/Missiles/FireballSharp/FireballSharpMissileFire.prefab`(尖锐烈焰火球飞弹)
|
- **火球飞弹**:`Assets/TJGeneratorLibEffects/Prefabs/Combat/Missiles/FireballSharp/FireballSharpMissileFire.prefab`(尖锐烈焰火球飞弹)
|
||||||
- **火球落地爆破**:`Assets/TJGeneratorLibEffects/Prefabs/Combat/Explosions/MagicExplosion/MagicExplosionFire.prefab`(烈焰散落爆破)
|
- **火球落地爆破**:`Assets/TJGeneratorLibEffects/Prefabs/Combat/Explosions/MagicExplosion/MagicExplosionFire.prefab`(烈焰散落爆破)
|
||||||
|
- **地面火海灼烧**:`Assets/TJGeneratorLibEffects/Prefabs/Environment/Fire/Cartoon/Field Intense/FireFieldIntenseRed.prefab`
|
||||||
|
- **荒野祭司治疗技能**:
|
||||||
|
- **急救/弹射治疗链**:`Assets/Prefabs/特效/飞球/cureBall.prefab`
|
||||||
|
- **落地治愈冲击波**:`Assets/TJGeneratorLibEffects/Prefabs/Interactive/Healing/HealNova.prefab`
|
||||||
|
|
||||||
#### 2. 召唤师与全局技能特效
|
#### 2. 召唤师与全局技能特效
|
||||||
- **召唤师治疗技能(神圣赞歌/群体治疗)**:
|
- **召唤师治疗技能(神圣赞歌/群体治疗)**:
|
||||||
|
|||||||
Reference in new issue
Block a user