U
Unity
星辰学院
首页
课程表
章节导览
第 1 课
返回主站
首页
/
第 14 章 · 3D 游戏进阶
/
第 238 课
LESSON 238 · 3D 游戏进阶
3D 门与开关机制
门与机关完成。下一课做 3D 环境交互。
⏱ 约 14 分钟
📊 难度:
入门
🗂 第 14 章 · 3D 游戏进阶
📍 第 238 / 300 课
课程进度
238 / 300
🎯
本节学习目标
实现自动门
实现钥匙门
实现机关触发
🚀
课程导读
“门怎么开”是 3D 场景最常见的机制。本课实现自动门、开关门、钥匙门。
◆
自动门与开关门
两种开门方式。
【自动门】门+触发器:玩家靠近自动开、离开自动关:
public class AutoDoor : MonoBehaviour {
public Transform door; // 门
public float openHeight = 3f;
public float speed = 3f;
private bool opening = false;
void OnTriggerEnter(Collider o) { if (o.CompareTag("Player")) opening = true; }
void OnTriggerExit(Collider o) { if (o.CompareTag("Player")) opening = false; }
void Update() {
Vector3 target = opening ? new Vector3(door.position.x, openHeight, door.position.z) : new Vector3(door.position.x, 0, door.position.z);
door.position = Vector3.Lerp(door.position, target, Time.deltaTime * speed);
}
}
【开关门】按 E 开/关(第 234 课交互框架)或按钮。
【滑动/旋转】开门动画:滑轨(Lerp 位置)或合页(Rotate)。
【测试】走进自动开、走出关。
【注意】触发器放在门两侧(玩家经过触发)。
💡
门 = 触发器(感应)+ Lerp(动起来)。自动门最简单实现。
◆
钥匙门与机关
有条件的门。
【钥匙门】门需要钥匙才能开:
public bool locked = true;
void OnTriggerEnter(Collider o) {
if (o.CompareTag("Player") && !locked) Open();
}
public void Unlock() { locked = false; /* 变色提示 */ }
【钥匙】钥匙道具(Trigger):碰到玩家调用门.Unlock()。
【锁定提示】锁住时屏幕提示“需要钥匙”(第 169 课)。
【机关触发】压力板/按钮:
压力板(触发器):站上去触发(OnTriggerStay 调用机制)。
开关:按 E 切换状态(第 234 课)。
【机关联动】开关控制多物体(桥、灯):
public GameObject bridge; public void Toggle() { bridge.SetActive(!bridge.activeSelf); }
【进阶】多个开关同时满足(计数器)。
【测试】捡钥匙→开门;踩板→升桥。
【完成】场景“有机关”了!
✅
机关三件:钥匙(解锁条件)、开关(触发源)、联动(效果物)。组合出任何机关。
⚠
常见错误与排查
⛔
错误:
门关不上?
原因:
Trigger 没设 Is Trigger 或 Exit 没触发
解决:
触发器 Collider 勾 Is Trigger;确认 OnTriggerExit 逻辑。
★
动手练习
课后小任务(做出来才算真的学会)
做自动感应门
做按 E 开关门
做钥匙门与压力板机关
✓
本节小结
门与机关完成。下一课做 3D 环境交互。
标记为已完成
完成打卡后,主站会实时更新你的学习进度 🎯
← 上一课
3D 投掷物(手雷/弓箭)
下一课 →
3D 环境交互(物理环境)
↑