调整linkdoor

This commit is contained in:
2026-05-19 16:04:40 +08:00
parent 0559d2cd36
commit aac24d825f
6 changed files with 410 additions and 72 deletions

View File

@@ -548,9 +548,15 @@ namespace BaseGames.Editor
Vector3 basePos = GetDropPosition();
// ── 共同父节点 ────────────────────────────────────────────────────
GameObject parent = new GameObject("LinkedDoorPair");
Undo.RegisterCreatedObjectUndo(parent, "Place LinkedDoorPair Root");
parent.transform.position = basePos;
// ── 门 A ─────────────────────────────────────────────────────────
GameObject goA = new GameObject("LinkedDoor_A");
Undo.RegisterCreatedObjectUndo(goA, "Place LinkedDoor_A");
Undo.SetTransformParent(goA.transform, parent.transform, "Parent LinkedDoor_A");
goA.transform.position = basePos + new Vector3(-3f, 0f, 0f);
SetLayer(goA, "TriggerZone", report);
@@ -558,18 +564,18 @@ namespace BaseGames.Editor
colA.isTrigger = true;
colA.size = new Vector2(1.5f, 2.5f);
SetupSpriteRenderer(goA);
GetOrAddComponent<Animator>(goA);
AnimancerComponent animancerA = GetOrAddComponent<AnimancerComponent>(goA);
Transform spawnA = GetOrCreateChild(goA.transform, "SpawnPoint");
spawnA.localPosition = new Vector3(1.2f, 0f, 0f); // 门右侧走出
LinkedDoorTransition doorA = GetOrAddComponent<LinkedDoorTransition>(goA);
AssignBool(doorA, "_autoTrigger", true);
AssignReference(doorA, "_animancer", animancerA, report);
AssignInt(doorA, "_facingDirectionOnArrive", 1); // 朝右走出
AssignReference(doorA, "_spawnPoint", spawnA, report);
AssignInt(doorA, "_facingDirectionOnArrive", 1); // 朝右走出
// ── 门 B ─────────────────────────────────────────────────────────
GameObject goB = new GameObject("LinkedDoor_B");
Undo.RegisterCreatedObjectUndo(goB, "Place LinkedDoor_B");
Undo.SetTransformParent(goB.transform, parent.transform, "Parent LinkedDoor_B");
goB.transform.position = basePos + new Vector3(3f, 0f, 0f);
SetLayer(goB, "TriggerZone", report);
@@ -577,30 +583,27 @@ namespace BaseGames.Editor
colB.isTrigger = true;
colB.size = new Vector2(1.5f, 2.5f);
SetupSpriteRenderer(goB);
GetOrAddComponent<Animator>(goB);
AnimancerComponent animancerB = GetOrAddComponent<AnimancerComponent>(goB);
Transform spawnB = GetOrCreateChild(goB.transform, "SpawnPoint");
spawnB.localPosition = new Vector3(-1.2f, 0f, 0f); // 门左侧走出
LinkedDoorTransition doorB = GetOrAddComponent<LinkedDoorTransition>(goB);
AssignBool(doorB, "_autoTrigger", true);
AssignReference(doorB, "_animancer", animancerB, report);
AssignInt(doorB, "_facingDirectionOnArrive", -1); // 朝左走出
AssignReference(doorB, "_spawnPoint", spawnB, report);
AssignInt(doorB, "_facingDirectionOnArrive", -1); // 朝左走出
// ── 互相绑定 ─────────────────────────────────────────────────────
AssignReference(doorA, "_linkedDoor", doorB, report);
AssignReference(doorB, "_linkedDoor", doorA, report);
report.Add("LinkedDoor_A ↔ LinkedDoor_B 已互相绑定。");
report.Add("将两扇门分别移到场景中正确位置(如两个区域的入口处)。");
report.Add("调整 _spawnOffset 使玩家传送后不被触发器再次捕获(如偏移 1f 让玩家落在门外侧)。");
report.Add("LinkedDoor_A ↔ LinkedDoor_B 已互相绑定,统一挂在 LinkedDoorPair 父节点下。");
report.Add("将两扇门移到场景中正确位置后,拖动各自的子节点 SpawnPoint 调整玩家传送到达位置。");
report.Add("转场效果:在各门 GameObject 上添加 SceneFeedback 组件并绑定 MMF_Player如淡入淡出再将其拖入 _transitionOut淡出和 _transitionIn淡入字段。");
report.Add("_facingDirectionOnArriveA→B 时玩家朝向由 B 的该值决定B→A 反之。");
report.Add("若需门动画,将 AnimationClip 拖入各自的 _openClip / _enterClip。");
Undo.CollapseUndoOperations(undoGroup);
// 选中 A便于立即调整位置
Selection.activeGameObject = goA;
MarkDirtyAndLog("Linked Door Pair (Same-Scene)", goA, report);
Selection.activeGameObject = parent;
MarkDirtyAndLog("Linked Door Pair (Same-Scene)", parent, report);
}
[MenuItem("BaseGames/Scene/Place/Camera Area", priority = 140)]