379 lines
3.3 KiB
Markdown
379 lines
3.3 KiB
Markdown
|
|
# Unity Project Agent Rules
|
||
|
|
|
||
|
|
你是当前 Unity 项目的开发助手。
|
||
|
|
|
||
|
|
在开始任何修改前,必须先阅读并遵守以下规则。
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
# 项目技术栈
|
||
|
|
|
||
|
|
Engine: Unity 2022.3 LTS
|
||
|
|
|
||
|
|
Language:
|
||
|
|
- C#
|
||
|
|
- 禁止生成 JavaScript / UnityScript
|
||
|
|
|
||
|
|
Render Pipeline:
|
||
|
|
- URP
|
||
|
|
|
||
|
|
Target Platform:
|
||
|
|
- PC
|
||
|
|
- Android
|
||
|
|
- iOS
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
# 工作流程
|
||
|
|
|
||
|
|
执行任何任务时:
|
||
|
|
|
||
|
|
1. 先分析目录结构
|
||
|
|
2. 搜索是否已有实现
|
||
|
|
3. 不重复创建系统
|
||
|
|
4. 优先复用已有模块
|
||
|
|
5. 先输出修改方案
|
||
|
|
6. 确认后再写代码
|
||
|
|
7. 修改后说明影响范围
|
||
|
|
|
||
|
|
禁止直接大规模重构。
|
||
|
|
|
||
|
|
禁止未经说明删除已有代码。
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
# 项目目录规范
|
||
|
|
|
||
|
|
Assets/
|
||
|
|
|
||
|
|
Scripts/
|
||
|
|
Prefabs/
|
||
|
|
Resources/
|
||
|
|
Art/
|
||
|
|
Resources/
|
||
|
|
Plugins/
|
||
|
|
Scenes/
|
||
|
|
StreamingAssets/
|
||
|
|
Settings/
|
||
|
|
禁止:
|
||
|
|
|
||
|
|
- 在根目录随意创建脚本
|
||
|
|
- 新建未知目录结构
|
||
|
|
- 修改 Plugins
|
||
|
|
|
||
|
|
必须遵守现有目录结构。
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
# 命名规范
|
||
|
|
|
||
|
|
类:
|
||
|
|
|
||
|
|
PascalCase
|
||
|
|
|
||
|
|
示例:
|
||
|
|
|
||
|
|
PlayerController
|
||
|
|
GameManager
|
||
|
|
InventorySystem
|
||
|
|
|
||
|
|
字段:
|
||
|
|
|
||
|
|
_privateField
|
||
|
|
|
||
|
|
属性:
|
||
|
|
|
||
|
|
CurrentHealth
|
||
|
|
|
||
|
|
方法:
|
||
|
|
|
||
|
|
MovePlayer()
|
||
|
|
LoadData()
|
||
|
|
|
||
|
|
常量:
|
||
|
|
|
||
|
|
MAX_PLAYER_COUNT
|
||
|
|
|
||
|
|
接口:
|
||
|
|
|
||
|
|
IInventory
|
||
|
|
|
||
|
|
枚举:
|
||
|
|
|
||
|
|
PlayerState
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
# MonoBehaviour规则
|
||
|
|
|
||
|
|
禁止:
|
||
|
|
|
||
|
|
一个脚本承担多个职责
|
||
|
|
|
||
|
|
避免:
|
||
|
|
|
||
|
|
God Object
|
||
|
|
|
||
|
|
每个 MonoBehaviour 只负责:
|
||
|
|
|
||
|
|
- 输入
|
||
|
|
- UI
|
||
|
|
- 状态
|
||
|
|
- 行为
|
||
|
|
|
||
|
|
中的一种职责。
|
||
|
|
|
||
|
|
复杂逻辑拆到普通 C# 类。
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
# 架构原则
|
||
|
|
|
||
|
|
优先:
|
||
|
|
|
||
|
|
Manager
|
||
|
|
Service
|
||
|
|
事件驱动
|
||
|
|
|
||
|
|
避免:
|
||
|
|
|
||
|
|
FindObjectOfType()
|
||
|
|
|
||
|
|
禁止:
|
||
|
|
|
||
|
|
每帧:
|
||
|
|
|
||
|
|
GameObject.Find()
|
||
|
|
|
||
|
|
禁止:
|
||
|
|
|
||
|
|
在 Update 中频繁查找对象
|
||
|
|
|
||
|
|
缓存引用。
|
||
|
|
|
||
|
|
优先依赖注入。
|
||
|
|
|
||
|
|
优先事件系统。
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
# UI规则
|
||
|
|
|
||
|
|
使用:
|
||
|
|
|
||
|
|
Canvas
|
||
|
|
Prefab
|
||
|
|
UI组件
|
||
|
|
|
||
|
|
禁止:
|
||
|
|
|
||
|
|
代码动态硬编码创建复杂UI
|
||
|
|
|
||
|
|
优先:
|
||
|
|
|
||
|
|
[SerializeField]
|
||
|
|
|
||
|
|
不要使用:
|
||
|
|
|
||
|
|
public直接暴露字段
|
||
|
|
|
||
|
|
例如:
|
||
|
|
|
||
|
|
[SerializeField]
|
||
|
|
private Button startButton;
|
||
|
|
|
||
|
|
而不是:
|
||
|
|
|
||
|
|
public Button startButton;
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
# 性能规则
|
||
|
|
|
||
|
|
禁止:
|
||
|
|
|
||
|
|
Update空轮询
|
||
|
|
|
||
|
|
避免:
|
||
|
|
|
||
|
|
GC Alloc
|
||
|
|
|
||
|
|
避免:
|
||
|
|
|
||
|
|
频繁new
|
||
|
|
|
||
|
|
避免:
|
||
|
|
|
||
|
|
LINQ出现在Update
|
||
|
|
|
||
|
|
避免:
|
||
|
|
|
||
|
|
字符串频繁拼接:
|
||
|
|
|
||
|
|
错误:
|
||
|
|
|
||
|
|
scoreText.text =
|
||
|
|
"Score:"+score;
|
||
|
|
|
||
|
|
优先:
|
||
|
|
|
||
|
|
scoreText.text =
|
||
|
|
$"Score:{score}"
|
||
|
|
|
||
|
|
对象池优先于Instantiate/Destroy。
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
# 日志规则
|
||
|
|
|
||
|
|
统一:
|
||
|
|
|
||
|
|
Debug.Log()
|
||
|
|
|
||
|
|
格式:
|
||
|
|
|
||
|
|
[模块名]
|
||
|
|
|
||
|
|
示例:
|
||
|
|
|
||
|
|
Debug.Log(
|
||
|
|
"[Network] Connected"
|
||
|
|
)
|
||
|
|
|
||
|
|
错误:
|
||
|
|
|
||
|
|
Debug.LogError(
|
||
|
|
"[Inventory] Load Failed"
|
||
|
|
)
|
||
|
|
|
||
|
|
禁止无上下文日志。
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
# 网络规则
|
||
|
|
|
||
|
|
网络逻辑统一放:
|
||
|
|
|
||
|
|
Scripts/Network/
|
||
|
|
|
||
|
|
禁止:
|
||
|
|
|
||
|
|
业务逻辑直接请求服务器
|
||
|
|
|
||
|
|
通过:
|
||
|
|
|
||
|
|
NetworkManager
|
||
|
|
|
||
|
|
统一转发
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
# ScriptableObject规则
|
||
|
|
|
||
|
|
配置数据:
|
||
|
|
|
||
|
|
使用 ScriptableObject
|
||
|
|
|
||
|
|
不要硬编码:
|
||
|
|
|
||
|
|
角色属性
|
||
|
|
武器数据
|
||
|
|
技能数据
|
||
|
|
关卡配置
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
# 修改代码前必须检查
|
||
|
|
|
||
|
|
是否已有:
|
||
|
|
|
||
|
|
Manager
|
||
|
|
|
||
|
|
是否已有:
|
||
|
|
|
||
|
|
Service
|
||
|
|
|
||
|
|
是否已有:
|
||
|
|
|
||
|
|
工具类
|
||
|
|
|
||
|
|
是否已有:
|
||
|
|
|
||
|
|
Prefab
|
||
|
|
|
||
|
|
是否已有:
|
||
|
|
|
||
|
|
事件系统
|
||
|
|
|
||
|
|
优先复用。
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
# 输出代码规则
|
||
|
|
|
||
|
|
生成完整代码:
|
||
|
|
|
||
|
|
包含:
|
||
|
|
|
||
|
|
using
|
||
|
|
|
||
|
|
namespace
|
||
|
|
|
||
|
|
类定义
|
||
|
|
|
||
|
|
必要注释
|
||
|
|
|
||
|
|
不要只输出局部片段。
|
||
|
|
|
||
|
|
代码需要可直接复制运行。
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
# 回答规则
|
||
|
|
|
||
|
|
先解释:
|
||
|
|
|
||
|
|
修改思路
|
||
|
|
|
||
|
|
再输出:
|
||
|
|
|
||
|
|
代码
|
||
|
|
|
||
|
|
最后说明:
|
||
|
|
|
||
|
|
影响范围
|
||
|
|
|
||
|
|
性能影响
|
||
|
|
|
||
|
|
潜在风险
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
# 禁止行为
|
||
|
|
|
||
|
|
禁止:
|
||
|
|
|
||
|
|
直接删旧系统
|
||
|
|
|
||
|
|
禁止:
|
||
|
|
|
||
|
|
修改 ThirdParty
|
||
|
|
|
||
|
|
禁止:
|
||
|
|
|
||
|
|
改 Package 配置
|
||
|
|
|
||
|
|
禁止:
|
||
|
|
|
||
|
|
擅自升级 Unity
|
||
|
|
|
||
|
|
禁止:
|
||
|
|
|
||
|
|
创建重复功能
|
||
|
|
|
||
|
|
禁止:
|
||
|
|
|
||
|
|
猜测项目结构
|
||
|
|
|
||
|
|
不知道时先搜索。
|