首页/ 第 14 章 · 3D 游戏进阶/ 第 238 课
LESSON 238 · 3D 游戏进阶

3D 门与开关机制

门与机关完成。下一课做 3D 环境交互。

⏱ 约 14 分钟📊 难度:入门🗂 第 14 章 · 3D 游戏进阶📍 第 238 / 300 课
课程进度
238 / 300

🎯本节学习目标

  • 实现自动门
  • 实现钥匙门
  • 实现机关触发

🚀课程导读

“门怎么开”是 3D 场景最常见的机制。本课实现自动门、开关门、钥匙门。

自动门与开关门

两种开门方式。

  1. 【自动门】门+触发器:玩家靠近自动开、离开自动关:
  2. public class AutoDoor : MonoBehaviour {
  3. public Transform door; // 门
  4. public float openHeight = 3f;
  5. public float speed = 3f;
  6. private bool opening = false;
  7. void OnTriggerEnter(Collider o) { if (o.CompareTag("Player")) opening = true; }
  8. void OnTriggerExit(Collider o) { if (o.CompareTag("Player")) opening = false; }
  9. void Update() {
  10. Vector3 target = opening ? new Vector3(door.position.x, openHeight, door.position.z) : new Vector3(door.position.x, 0, door.position.z);
  11. door.position = Vector3.Lerp(door.position, target, Time.deltaTime * speed);
  12. }
  13. }
  14. 【开关门】按 E 开/关(第 234 课交互框架)或按钮。
  15. 【滑动/旋转】开门动画:滑轨(Lerp 位置)或合页(Rotate)。
  16. 【测试】走进自动开、走出关。
  17. 【注意】触发器放在门两侧(玩家经过触发)。
💡
门 = 触发器(感应)+ Lerp(动起来)。自动门最简单实现。

钥匙门与机关

有条件的门。

  1. 【钥匙门】门需要钥匙才能开:
  2. public bool locked = true;
  3. void OnTriggerEnter(Collider o) {
  4. if (o.CompareTag("Player") && !locked) Open();
  5. }
  6. public void Unlock() { locked = false; /* 变色提示 */ }
  7. 【钥匙】钥匙道具(Trigger):碰到玩家调用门.Unlock()。
  8. 【锁定提示】锁住时屏幕提示“需要钥匙”(第 169 课)。
  9. 【机关触发】压力板/按钮:
  10. 压力板(触发器):站上去触发(OnTriggerStay 调用机制)。
  11. 开关:按 E 切换状态(第 234 课)。
  12. 【机关联动】开关控制多物体(桥、灯):
  13. public GameObject bridge; public void Toggle() { bridge.SetActive(!bridge.activeSelf); }
  14. 【进阶】多个开关同时满足(计数器)。
  15. 【测试】捡钥匙→开门;踩板→升桥。
  16. 【完成】场景“有机关”了!
机关三件:钥匙(解锁条件)、开关(触发源)、联动(效果物)。组合出任何机关。

常见错误与排查

错误:门关不上?
原因:Trigger 没设 Is Trigger 或 Exit 没触发
解决:触发器 Collider 勾 Is Trigger;确认 OnTriggerExit 逻辑。

动手练习

课后小任务(做出来才算真的学会)

  • 做自动感应门
  • 做按 E 开关门
  • 做钥匙门与压力板机关

本节小结

门与机关完成。下一课做 3D 环境交互。

完成打卡后,主站会实时更新你的学习进度 🎯

← 上一课3D 投掷物(手雷/弓箭)