结合 AI 工具「马上开练」Unity cover image

结合 AI 工具「马上开练」Unity

最近看到的Winsurf 比 Cursor便宜很多(主要是不限量),有点心动,从新手入手的角度,了解以下内容:

MonoBehaviour 最小必懂 + Windsurf 提示词模板 + 练手 Unity UI (带任务拆解)


  • MonoBehaviour = 挂在 GameObject 上的脚本组件
  • Unity 会在特定时机自动调用它的一些函数(生命周期)
  • Awake():脚本实例化时(最早),做“自己内部初始化”
  • Start():第一帧前,做“需要等别的对象也准备好”的初始化
  • Update():每帧执行(适合输入/计时/简单轮询)
  • OnEnable()/OnDisable():组件启用/禁用时(适合订阅/取消订阅事件)
  • OnDestroy():对象销毁时(清理)
你做 UI 的话:少写 Update,多用事件(按钮点击、动画回调等)。
  • 序列化字段:让设计师友好地拖引用

    [SerializeField] private Button startBtn;

  • 引用GetComponent / Inspector 拖拽

    建议:能拖就拖,少 GetComponent 到处找。

  • 协程 Coroutine:做“等一下再做”

    StartCoroutine(...) + yield return new WaitForSeconds(...)

  • Invoke / 定时:简单延迟(但协程更可控)
  • 事件监听:UI Button

    startBtn.onClick.AddListener(OnStartClicked);

  1. 按钮 AddListener 写在 Start,但对象反复启用 → 监听会叠加

    ✅ 解决:在 OnEnable 订阅,在 OnDisable 取消订阅

  2. UI 动画结束靠猜秒数 → 早晚不同步

    ✅ 解决:用 Animation Event / Animator State 回调 / Timeline Signal

  3. 一个脚本啥都管 → 越改越乱

    ✅ 解决:UI 显示(View)和业务(Controller/Model)分开一点点就行

  • 只能挂在 GameObject
  • 不能 new
  • Unity 负责创建、调用它

👉 本质:Unity 管理生命周期的脚本组件


  • 最早执行
  • 不依赖别的对象
  • 适合:初始化自己内部数据

❌ 不适合:找别的对象、跨脚本通信


  • 组件被启用就会调用
  • 包括:场景加载、SetActive(true)

👉 订阅事件的最佳地点


  • 第一帧前调用
  • 确保其他对象大概率也准备好了

👉 UI 初始化、刷新显示


  • 每一帧都会跑
  • UI 项目尽量少用

👉 只做:输入监听、非常简单的计时


  • 组件被禁用就调用
  • 和 OnEnable 成对

👉 取消订阅事件(非常重要)


  • 对象真正销毁时
  • 场景切换、Destroy()

👉 清理资源 / 日志 / 安全兜底


[SerializeField] private Button startButton;
  • 私有变量也能在 Inspector 里拖
  • UI 必用

👉 比 public 安全、比 GetComponent 稳


  • 能拖就拖
  • GetComponent 只用于“同物体自己拿自己”

👉 UI 脚本千万别到处找对象


button.onClick.AddListener(OnClick);
  • 放在 OnEnable
  • OnDisable 移除

👉 防止重复监听的关键


StartCoroutine(FadeOut());
  • 用来:等待、动画、流程控制
  • UI 淡入淡出神器

👉 比 Update + 计时器清晰 10 倍


  • 一个 Panel = 一个脚本
  • 一个 Manager = 一个职责

👉 这是从“能跑”到“不烂”的分水岭


如果你能 不看资料 回答这 6 个问题,说明你真的掌握了:

  1. Awake 和 Start 的区别?
  2. 为什么按钮监听不该写在 Start?
  3. OnEnable 会在什么时候被调用?
  4. 为什么 UI 少用 Update?
  5. SerializeField 比 public 好在哪?
  6. 协程什么时候比 Animator 更合适?

你不需要马上全答对,但这是你接下来 练 UI 项目时会不断用到的点


你现在最适合的 Windsurf 用法是:“让它像资深同事一样,边做边解释,且限制复杂度”

你是 Unity C# 导师。请用最简单、可维护、适合新手的方式实现下面需求。
要求:
1) 不要用任何高级架构(不要MVC框架、不要DI容器、不要泛型花活)
2) 代码必须能直接粘贴运行(给出脚本文件名、挂载对象建议、Inspector 需要拖哪些引用)
3) 每段代码后用中文解释“为什么这样写”
需求:
[把你的需求写这里]
请先总结这个 Unity 项目 UI 相关结构:
- 哪些脚本负责 UI
- UI 状态/数据从哪里来
- 关键的按钮点击流程是怎么走的

然后告诉我:如果我要实现[你的功能],最少需要改哪几个文件、每个文件改什么。
最后给我一个安全的改动步骤(每一步都能跑)。
我会先写一个“能跑的最蠢版本”。请你:
1) 保持行为不变
2) 帮我把结构改到“以后好加功能”
3) 标出我写得危险/坏习惯的地方,并解释原因
代码如下:
[粘贴脚本]
请用一个最小例子演示 Awake/Start/OnEnable/OnDisable/Update 的调用顺序。
要求:
- 只用一个场景、两个 GameObject
- 输出 Debug.Log,告诉我每一步什么时候触发、为什么
- 给出我应该怎么在 Inspector 上操作来观察差异
我要做一个 UI 过场:
- 点击按钮
- 播放 UI 动画(淡出/滑入)
- 动画结束后切换面板/场景

请给我两种方案:
A) 用协程 + CanvasGroup
B) 用 Animator + 动画事件/StateMachineBehaviour
每种方案都给完整脚本和挂载说明,并解释优缺点。

你会练到:

  • Button 事件
  • Panel 切换
  • CanvasGroup 淡入淡出
  • 数据保存(PlayerPrefs)
  • “确认弹窗”复用组件
  • 不写 Update 也能做完整交互

  1. MainHUD:显示一个 “Pause” 按钮
  2. PauseMenu:Resume / Settings / Quit
  3. Settings:音量 Slider、全屏 Toggle、返回
  4. ConfirmDialog:弹窗(通用)“确定 / 取消”

  • 点击 Pause:HUD 淡出,PauseMenu 淡入,Time.timeScale = 0
  • Resume:返回 HUD,Time.timeScale = 1
  • Settings:进入设置页(保留暂停状态)
  • 音量 slider 调整 AudioListener.volume
  • 退出 Quit:弹 ConfirmDialog
    • 确定:退出到 MainMenu 场景(或者先 Debug.Log)
    • 取消:关闭弹窗
这个项目做完,你就已经比“只会教程”的人强很多了,因为它是可复用的真实 UI 模块。

Step 1:搭 UI

  • Canvas(Screen Space - Overlay)
  • 四个 Panel:HUD / Pause / Settings / Dialog
  • 每个 Panel 先用不同背景色方便看切换(后面再美化)

Step 2:写 Panel 显示隐藏(CanvasGroup)

  • 给每个 Panel 加 CanvasGroup
  • 写一个 UIPanel.cs:Show/Hide(含淡入淡出)

Step 3:写 UIManager 管面板切换

  • UIManager 只负责:打开哪个面板、关闭哪个面板
  • 暂停逻辑放这里:Pause 时 timeScale 变 0

Step 4:做 Settings 的数据保存

  • PlayerPrefs 保存 volume/fullscreen
  • 启动时读取并刷新 UI

Step 5:做通用 ConfirmDialog

  • ConfirmDialog.Show(message, onConfirm, onCancel)
  • Quit 点击时调用它

  • 每个 Panel 只管自己 UI 元素和表现(View)
  • UIManager 管流程和跳转(Controller)
  • 数据保存是独立的小模块(Data)

这就是你现在最缺、但最该补的一块。


你想让我直接把这个项目的最小可运行代码骨架给你吗?

(包含:UIPanel.csUIManager.csSettingsPanel.csConfirmDialog.cs,以及每个脚本挂哪、Inspector 拖哪些)

我会按“新手不劝退”的写法给你,复制进去就能跑。

💡
ai、设计、本银河星区空间站,是由 Tia 打造,主要分享日志、ai、设计、效率工具和在银河系生活的所思所想,欢迎分享文章