@
feat(enemy): 追击起手前先转身朝玩家(播 Flip) + 冲刺速度可配置 - ContactChaseAbility:进入追击先 FaceDirection 朝玩家,若背对则播 Flip 转身、 等 IsTurning 结束后再 Skill_Start(张口)→冲刺;已朝向玩家则跳过转身直接张口。 - 新增 _dashSpeed 字段(<=0 回退 Stats.RunSpeed),冲刺速度可在能力 Inspector 配置。 - E001 EnemyMovement._enableTurnAnimation=true(prefab+脚手架),转向播 AnimConfig.Turn (Flip),用于巡逻翻边与追击起手前转身;脚手架 PlaceE001 同步。 PlayMode 验证(brain 关隔离):背对玩家→触发追击→clip=Flip(IsTurning)→转向完成 facing 朝玩家→Skill_Start→冲刺→Skill_End,"先转身再张口"成立。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> @
This commit is contained in:
@@ -326,7 +326,7 @@ MonoBehaviour:
|
|||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
_config: {fileID: 11400000, guid: 508afd17a0cf2fe47935c78097c3b093, type: 2}
|
_config: {fileID: 11400000, guid: 508afd17a0cf2fe47935c78097c3b093, type: 2}
|
||||||
_spriteRenderer: {fileID: 7572402007749840909}
|
_spriteRenderer: {fileID: 7572402007749840909}
|
||||||
_enableTurnAnimation: 0
|
_enableTurnAnimation: 1
|
||||||
_animancer: {fileID: 7326741988116792408}
|
_animancer: {fileID: 7326741988116792408}
|
||||||
_animConfig: {fileID: 11400000, guid: 06936c5bc3358904cb269abdfa60ed14, type: 2}
|
_animConfig: {fileID: 11400000, guid: 06936c5bc3358904cb269abdfa60ed14, type: 2}
|
||||||
_visualRoot: {fileID: 1594798921504223030}
|
_visualRoot: {fileID: 1594798921504223030}
|
||||||
@@ -603,6 +603,7 @@ MonoBehaviour:
|
|||||||
_Clip: {fileID: 7400000, guid: 9f0fea347ba7eb347b0f71b423832808, type: 2}
|
_Clip: {fileID: 7400000, guid: 9f0fea347ba7eb347b0f71b423832808, type: 2}
|
||||||
_NormalizedStartTime: NaN
|
_NormalizedStartTime: NaN
|
||||||
_contactDamage: {fileID: 9135205194319985817}
|
_contactDamage: {fileID: 9135205194319985817}
|
||||||
|
_dashSpeed: 0
|
||||||
references:
|
references:
|
||||||
version: 2
|
version: 2
|
||||||
RefIds: []
|
RefIds: []
|
||||||
|
|||||||
@@ -510,6 +510,7 @@ namespace BaseGames.Editor
|
|||||||
|
|
||||||
AssignAsset(movement, "_config", report, false, "ENM_E001_Stats");
|
AssignAsset(movement, "_config", report, false, "ENM_E001_Stats");
|
||||||
AssignAsset(movement, "_animConfig", report, false, "ENM_E001_AnimConfig");
|
AssignAsset(movement, "_animConfig", report, false, "ENM_E001_AnimConfig");
|
||||||
|
AssignBool(movement, "_enableTurnAnimation", true); // 转向播 Flip(巡逻翻边/追击起手前转身)
|
||||||
AssignReference(movement, "_visualRoot", visual, report);
|
AssignReference(movement, "_visualRoot", visual, report);
|
||||||
AssignReference(movement, "_animancer", animancer, report);
|
AssignReference(movement, "_animancer", animancer, report);
|
||||||
AssignReference(movement, "_spriteRenderer", sr1, report);
|
AssignReference(movement, "_spriteRenderer", sr1, report);
|
||||||
|
|||||||
@@ -21,11 +21,28 @@ namespace BaseGames.Enemies.Abilities
|
|||||||
[Header("接触伤害")]
|
[Header("接触伤害")]
|
||||||
[SerializeField] private BodyContactDamage _contactDamage;
|
[SerializeField] private BodyContactDamage _contactDamage;
|
||||||
|
|
||||||
|
[Header("冲刺")]
|
||||||
|
[Tooltip("冲刺速度;<=0 时回退用 EnemyStatsSO.RunSpeed(追击速度)")]
|
||||||
|
[SerializeField] private float _dashSpeed = 0f;
|
||||||
|
|
||||||
protected override IEnumerator ExecuteCoroutine()
|
protected override IEnumerator ExecuteCoroutine()
|
||||||
{
|
{
|
||||||
Phase = AbilityRunState.Active;
|
Phase = AbilityRunState.Active;
|
||||||
_enemy.SetEngaged(true);
|
_enemy.SetEngaged(true);
|
||||||
|
|
||||||
|
// 冲刺方向:按玩家所在侧一次性确定(committed 冲锋)
|
||||||
|
float dir = (_enemy.PlayerTransform != null &&
|
||||||
|
_enemy.PlayerTransform.position.x < _enemy.transform.position.x) ? -1f : 1f;
|
||||||
|
var mv = _enemy.Movement;
|
||||||
|
|
||||||
|
// 先转身朝玩家(背对时播 Flip 转身动画),转身完成后再张口
|
||||||
|
if (mv != null)
|
||||||
|
{
|
||||||
|
mv.FaceDirection((int)dir);
|
||||||
|
while (mv.IsTurning)
|
||||||
|
yield return null;
|
||||||
|
}
|
||||||
|
|
||||||
// 起手:张口(一次性)。期间静止、不伤人;锁住动画防被步态覆盖。
|
// 起手:张口(一次性)。期间静止、不伤人;锁住动画防被步态覆盖。
|
||||||
if (_startClip.Clip != null)
|
if (_startClip.Clip != null)
|
||||||
{
|
{
|
||||||
@@ -34,11 +51,9 @@ namespace BaseGames.Enemies.Abilities
|
|||||||
yield return EnemyAbilityWaits.Get(_startClip.Clip.length);
|
yield return EnemyAbilityWaits.Get(_startClip.Clip.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 冲刺方向:起手后按玩家所在侧一次性确定(committed 冲锋)
|
// 冲刺速度:优先能力配置的 _dashSpeed,否则回退 Stats.RunSpeed
|
||||||
float dir = (_enemy.PlayerTransform != null &&
|
float speed = _dashSpeed > 0f ? _dashSpeed
|
||||||
_enemy.PlayerTransform.position.x < _enemy.transform.position.x) ? -1f : 1f;
|
: (_enemy.Stats != null ? _enemy.Stats.RunSpeed : 0f);
|
||||||
float speed = _enemy.Stats != null ? _enemy.Stats.RunSpeed : 0f;
|
|
||||||
var mv = _enemy.Movement;
|
|
||||||
|
|
||||||
// 冲刺:朝该方向直冲、接触伤害开、播 Skill_Loop,直到撞墙/到边缘或玩家消失即停。
|
// 冲刺:朝该方向直冲、接触伤害开、播 Skill_Loop,直到撞墙/到边缘或玩家消失即停。
|
||||||
if (_loopClip.Clip != null)
|
if (_loopClip.Clip != null)
|
||||||
|
|||||||
Reference in New Issue
Block a user