From a9acace0a042189f0c228337ba0abaad01d7c28e Mon Sep 17 00:00:00 2001 From: Joywayer Date: Fri, 3 Jul 2026 15:03:27 +0800 Subject: [PATCH] =?UTF-8?q?feat(ai):=20E001(=E8=8D=89=E8=9B=AD)=20AiScript?= =?UTF-8?q?=20=E5=AE=9A=E4=B9=89=E2=80=94=E2=80=94=E5=B7=A1=E9=80=BB/?= =?UTF-8?q?=E8=BF=BD=E5=87=BB/=E6=90=9C=E6=9F=A5(=E6=8E=A5=E8=A7=A6?= =?UTF-8?q?=E4=BC=A4=E5=AE=B3=E6=9D=82=E5=85=B5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/_Game/Scripts/Enemies/AIBrain/Ai.meta | 8 ++++ .../Enemies/AIBrain/Ai/E001CaoZhiAi.cs | 40 +++++++++++++++++++ .../Enemies/AIBrain/Ai/E001CaoZhiAi.cs.meta | 11 +++++ 3 files changed, 59 insertions(+) create mode 100644 Assets/_Game/Scripts/Enemies/AIBrain/Ai.meta create mode 100644 Assets/_Game/Scripts/Enemies/AIBrain/Ai/E001CaoZhiAi.cs create mode 100644 Assets/_Game/Scripts/Enemies/AIBrain/Ai/E001CaoZhiAi.cs.meta diff --git a/Assets/_Game/Scripts/Enemies/AIBrain/Ai.meta b/Assets/_Game/Scripts/Enemies/AIBrain/Ai.meta new file mode 100644 index 00000000..93649e8b --- /dev/null +++ b/Assets/_Game/Scripts/Enemies/AIBrain/Ai.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d0934d78d9f1fe34aa6c0429a0822df8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Game/Scripts/Enemies/AIBrain/Ai/E001CaoZhiAi.cs b/Assets/_Game/Scripts/Enemies/AIBrain/Ai/E001CaoZhiAi.cs new file mode 100644 index 00000000..de06af92 --- /dev/null +++ b/Assets/_Game/Scripts/Enemies/AIBrain/Ai/E001CaoZhiAi.cs @@ -0,0 +1,40 @@ +using BaseGames.AI; + +namespace BaseGames.Enemies +{ + /// + /// E001(草蛭)的 AI 定义:巡逻 → 追击(接触即伤害,无需攻击能力)→ 搜查 → 巡逻。 + /// 数值目前用字面量常量;后续可外挂 SO 做热调。 + /// + [AiDefinition("E001")] + public sealed class E001CaoZhiAi : AiScript + { + const float LoseTimeout = 2.5f; // 丢失玩家判定 + const float SearchTime = 3f; // 搜查后返回巡逻 + + protected override void Build(BrainBuilder b) + { + b.Entry("Patrol"); + + // 死亡:全局事件,终止决策 + b.Global().To("Dead").OnEvent(AiSignal.Died); + + b.State("Patrol") + .Tick(c => c.Mover.WalkRandom()) + .To("Chase").When(c => c.Sensor.SeesPlayer(), "SeesPlayer"); + + b.State("Chase") + .OnEnter(c => c.Mover.FacePlayer()) + .Tick(c => c.Mover.MoveTo(c.Sensor.LastKnown)) // 冲向玩家,接触即由 BodyContactDamage 造成伤害 + .To("Search").When(c => c.Sensor.LostFor(LoseTimeout), "LostFor"); + + b.State("Search") + .OnEnter(c => c.Mover.LookAround()) + .To("Chase").When(c => c.Sensor.SeesPlayer(), "SeesPlayer") + .To("Patrol").After(SearchTime); + + b.State("Dead") + .OnEnter(c => c.Mover.Stop()); + } + } +} diff --git a/Assets/_Game/Scripts/Enemies/AIBrain/Ai/E001CaoZhiAi.cs.meta b/Assets/_Game/Scripts/Enemies/AIBrain/Ai/E001CaoZhiAi.cs.meta new file mode 100644 index 00000000..99a8f7d5 --- /dev/null +++ b/Assets/_Game/Scripts/Enemies/AIBrain/Ai/E001CaoZhiAi.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 82a595c9b77505c448845d8cd1a56064 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: