# HKUnityTools
**Repository Path**: DreamerLin96/hk_-unity-tools
## Basic Information
- **Project Name**: HKUnityTools
- **Description**: Unity的工具集(基于QFramework和Dotween)
- **Primary Language**: C#
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 17
- **Created**: 2023-09-09
- **Last Updated**: 2025-05-24
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# HK_UnityTools
## 介绍:
我们团队在Unity项目中积累的工具集,包含两部分:编辑器功能、运行时功能。目的在于优化团队制作及开发的工作流,以及减少相关制作和开发的工作量。
本项目部分模块依赖于:Dotween和QFramework,如有问题可联系:QQ 511919078 \
**(号外号外!团队在青岛,主要做VR、AR、MR、虚拟仿真项目,目前招开发小伙伴,有意向的可发私信或QQ!)**
## 编辑器功能:
### 0. HK_GlobalSetting:
全局设置面板。
***
### 1. HK_SmartCopy:
对选中的物体进行智能复制,按Ctrl+Shift+D进行复制(只能且必须选中一个物体),第一次复制时会记录便宜的位移、旋转、缩放,之后再次按Ctrl+Shift+D可根据偏移量增量连续进行复制(借鉴Maya中的复制功能)。
***
### 2. HK_MakeGroup:
对选中的物体进行打组操作。
***
### 3. HK_HierarchyPro:
在Hierarchy面板中显示物体的:激活状态、某些组件图标、Tag名称等。
***
### 4. HK_ShortCutsExtension
Unity中部分MenuItem的快捷键拓展。
***
### 5. HK_ReName:
该工具中包含了:根据指定字符串查找物体、替换选中物体名称中的指定字符串、对选中物体进行重命名。
***
### 6. HK_RandomRotOrScale:
对选中的物体进行随机旋转和缩放。
***
### 7. HK_DotweenEaseShow:
(依赖Dotween)该工具可对Dotween内置Ease缓动动画进行预览,可查看所有缓动类型的动画曲线及相应预览动画。
***
### 8. HK_CreateGoByPath
根据LineRenderer路径生成模型,可用于数字城市项目中如生成沿路路灯、公共座椅等模型。
***
### 9. HK_AutoSwitchToUTF8:
自动将新建的脚本,转为UTF-8编码,防止脚本在Inspector面板预览时产生乱码。
***
### 10. HK_WebsiteCollection
Unity开发相关站点的集合。
***
### 11. HK_Foldup(Attribute):
将脚本中的序列化变量,在Inspector面板中进行折叠收纳整理。
***
### 12. HK_ReadOnly(Attribute):
将脚本中的序列化变量,在Inspector面板中变为ReadOnly,只能看不能改。
***
### 13. HK_OverWrite:
对Unity中的某些功能进行重写,改善原本Unity默认功能中不大合适的地方,提高项目开发效率。目前包含:Image、Text组件重写,新建时默认取消勾选RaycastTarget,因为绝大多数时候这两个组件并不需要RaycastTarget,这样可以提高运行时效率。
***
### 14. HK_TagAndLayerView:
场景中Tag和Layer的管理工具,对项目中所有的Tag标签及Layer层级进行显示,显示当前场景中对应Tag标签(或Layer层级)包含的物体数量,且可进行选择。
***
### 15. HK_HierarchySearch:
根据条件(名字、组件),对Hierarchy中选择的物体进行查询并重新选定。
## 运行时功能:
### 1. HK_FreeCam:
**功能描述:**
>
+ 漫游摄像机控制脚本,主要用于场景编辑、开发期间,测试观察使用;
+ 运行时可通过鼠标键盘,控制相机移动、旋转、缩放,方便开发及制作人员对场景进行自由观察;
+ 开发测试结束后可直接将该组件移除。
>
**使用方式:**
+ 将该脚本添加到Main Camera上,点击运行后即可使用;
+ 按住WASD键进行前后左右移动,QE键进行上下移动;
+ 按住鼠标右键进行视角旋转;
+ 按住Shift进行位移加速;
+ 按住鼠标右键,旋转视角
+ 滚动鼠标滚轮,视野缩放;
>
**外部依赖:**
+ 无
***
### 2. HK_TargetCam(引入了QF框架):
**功能描述:**
>
+ Camera多目标切换管理工具,可控制Camera在多个Target之间切换;
+ Target分为三种:RotTarget、AreaTarget、FollowTarget;
+ 切换至RotTarget目标点后,相机可围绕Target进行旋转、缩放操作;
+ 切换至AreaTarget目标点后,相机可在Target标识区域进行前后左右平移、缩放操作;
+ 切换至FollowTarget目标点后,相机可跟随目标点移动,且可围绕移动的Target进行旋转、缩放操作;
+ 可根据Target的枚举值、名称进行切换,切换时可更改Camera缩放速度、移动速度;
+ TargetCamera下有个Mask子物体,其材质球为 BuildIn 渲染管线,若用URP或HDRP渲染管线,需手动调整Mask的shader。
>
**使用方式:**
+ 在本项目的 Architecture 中注册 IHK_TargetCamSystem;
+ 将 HK_TargetCamController 中的 Architecture 修改为本项目的 Architecture;
+ 将 TargetCamera 预设体,拖入场景中,替换默认Camera;
+ 根据需求,在场景中添加 RotTarget、AreaTarget、FollowTarget(可从预设体中拖入场景中);
+ 编辑 HK_RotTargetItem、HK_AreaTargetItem、HK_FollowTargetITem 组件对应的:枚举标记、名称(可选)、默认距离等属性;
+ 调整 TargetCamera 物体上的 HK_TargetCamCtrl 组件,对其进行初始化参数编辑;
+ 若 HK_TargetCamCtrl 组件指定了 initTarget (初始化目标点),则运行后 TargetCamera 会自动转换到 initTarget 对应的目标;
+ 发送 CMD_ChangeCamTarget 指令(并传入对应参数)进行 Camera 目标切换;
+ 发送 CMD_ChangeCamTarget 指令时,可传入 isFlash 及 isBlink 参数,控制 Camera “闪现”到对应目标;
+ 发送 CMD_ChangeCamTarget 指令时,可传入 delayTime 参数,控制 Camera 延时切换到对应目标;
+ 发送 CMD_SetCameraState 指令时,可传入 isCanCtrl 参数控制相机是否可移动、旋转、缩放;
+ 订阅 Event_SwitchTargetBegin 事件,当目标切换开始时接受到该事件;
+ 订阅 Event_SwitchTargetEnd 事件,当目标切换完成后接受到该事件;
+ 具体用法,可参考 Test_UseTargetCam 脚本。
>
**外部依赖:**
+ Dotween、ActionKit
***
### 3. HK_RoamingCam(引入了QF框架):
**功能描述:**
>
+ PC端、WebGL端、Android端虚拟展厅类体验相机控制管理工具;
+ 支持通过鼠标点击、手指触摸两种方式进行交互;
+ 视角控制分为:第一人称漫游、三维俯视漫游、鸟瞰正交漫游三种模式;
+ 第一人称漫游(RoamView):通过点击地面标识点进行位移(依赖Unity Navigation);
+ 鸟瞰正交漫游(BirdView):上帝视角进行观察,相机为 Orthographic
+ 三维俯视漫游(ThreeDView):上帝视角进行观察,相机为 Perspective
>
**使用方式:**
+ 在本项目的 Architecture 中注册 IHK_RoamingCamSystem;
+ 将 HK_RoamingCamController 中的 Architecture 修改为本项目的 Architecture;
+ 在场景中设置好Navigation Static,并进行 Navigation烘焙,生成合适的NavMesh;
+ 在场景中指定 RoamView 使用的 Point点位(附带HK_Point脚本),并设置好LookAtType;
+ 在场景中指定好 BirdView和ThreeDView 使用的 OverlookPos及RotAroundTarget;
+ 将HK_RoamPlayer预设体放入场景中,并进行初始化设置;
+ 具体用法,可参考Test_UIRoamCamCtrl 脚本;
>
**外部依赖:**
+ Dotween
***
### 4. HK_FirstPersonCam(引入了QF框架)
**功能描述:**j
>
+ PC端的第一人称视角控制相机;
+ 支持通过鼠标、键盘进行第一人称角色控制;
>
**使用方式:**
+ 在本项目的 Architecture 中注册 IHK_FirstPersonCamSystem;
+ 将 HK_FirstPersonCamController 中的 Architecture 修改为本项目的 Architecture;
+ 将场景中需碰撞的物体(如地面等),设置好碰撞体,并设置好Layer;
+ 将 FirstPersonPlayer 预设体,拖入场景中;
+ 在 FirstPersonPlayer 预设体的 HK_FirstPersonCtrl 组件中,设置好 GroundMask 层级;
+ 设置完成后即可通过鼠标、键盘进行操控,按住鼠标右键控制角色旋转,按WASD键控制角色移动;
+ 在表现层脚本中通过发送 CMD_ChangeFirstPersonPos 指令(并传入对应参数),可根据目标切换位置;
+ 参考 Test_FirstPlayerCamChangePos 进行位置切换设置;
>
**外部依赖:**
+ Dotween
***
### 5. HK_TaskSystem(引入了QF框架):
**功能描述:**
>
+ 任务管理系统(通过配置文件对任务流进行配置及编辑);
+ 可在Unity编辑器中对任务流进行编辑,编辑后在运行时进行使用。
>
**使用方式:**
+ 在本项目的 Architecture 中注册 IHK_TaskSystem;
+ 将 HK_TaskSystemController 中的 Architecture 修改为本项目的 Architecture;
+ 本系统分三个层级:任务链 TaskList、任务 Task、条件 Condition
+ 对外方法有四个:
StartNewTaskList(string taskDataName) //开启 新的 任务链
BreakOffTaskList() // 中断 当前 任务链
AchieveCondition(HK_ConditionType condition) // 达成指定条件
StopTaskAudio() // 停止当前播放的任务语音
+ 推荐使用Command指令来使用TaskSystem,四个对外方法分别对应四个Command:
CMD_StartNewTaskList :开启新的任务链指令
CMD_BreakOffTaskList :中断当前任务链指令
CMD_AchieveCondition :达成指定条件指令
CMD_StopTaskAudio :停止当前播放的任务语音指令
+ 外部可监听事件有六个:
Event_TaskListStart // 任务链开始 事件
Event_TaskListFinish // 任务链结束 事件
Event_TaskListBreadOff // 任务链中断 事件
Event_TaskStart // 任务开始 事件
Event_TaskFinish // 任务结束 事件
Event_ConditionAchieve // 条件达成 事件
>
**外部依赖:**
+ ActionKit、AudioKit
***
### 6. HK_SimpleDialogSystem(引入了QF框架):
**功能描述:**
>
+ 简易对话系统(通过CSV配置文件对话进行配置及编辑);
+ 在Excel中对对话流程进行编辑,编辑后另存为CSV文件,放在Resource文件夹下;
+ 需确保CSV文件为UTF-8编码格式;
+ 目前支持3D的对话UI,主要为适配VR开发;
>
**使用方式:**
+ 在本项目的 Architecture 中注册 IHK_SimpleDialogSystem;
+ 将 HK_SimpleDialogController 中的 Architecture 修改为本项目的 Architecture;
+ 使用Command指令来使用HK_SimpleDialogSystem,三个指令分别为:
CMD_StartNewDialog3D :开启新的3D对话指令
CMD_EndCurDialog3D : 停止当前的3D对话指令
CMD_PlayForwardDialog :继续推进对话指令
+ 外部可监听事件有三个:
Event_DialogStart // 对话开始 事件
Event_DialogEnd // 对话结束 事件
Event_OptionChoiced // 选项做出选择 事件
>
**外部依赖:**
+ Dotween
***
### 7. HK_UGUITools:
#### 7.1 HK_CollapsibleMenu(引入了QF框架)
**功能描述:**
+ 折叠菜单UI预设,可直接推拽至Canvas下进行适用。
+ 通过改1、2、3级MenuItem的预设体,适配不同的UI。
+ MenuItem按钮点击后发送指令。
#### 7.2 HK_UIOverride
**功能描述:**
+ 重写的UGUI Button组件:
通过在Inspector面板中修改AudioType,播放对应的Button点击音效(需注册对应的音效播放事件)。
通过在Inspector面板中修改AnimType,启用相应的Button动效(使用Dotween,可自行在脚本中修改)。
+ 重写的UGUI Toggle组件:
通过在Inspector面板中修改AudioType播放对应的Toggle点击音效(需注册对应的音效播放事件)。
+ 重写的UGUI Dropdown组件:
通过在Inspector面板中修改AudioPressType和AudioSelectType,播放对应的点击及选中音效(需注册对应的音效播放事件)。
#### 7.3 HK_SlidePage
**功能描述:**
+ 图片轮播功能,将预设体拖拽到Canvas下,修改部分参数配置即可使用。
#### 7.4 HK_UIFramesAnimator
**功能描述:**
+ UI动画序列帧播放控制功能,可添加在UGUI的Image组件物体上,序列帧分为:初始时序列帧、循环序列帧、结束时序列帧。
***
### 8. HK_Video:
在Unity中进行视频播放的功能模块,对VideoPlayer进行了封装。
***
### 9. HK_SimpleTask:
(引入了QF框架)简单的任务管理系统,通过枚举定义“任务流程”及“任务名”,可应用在较为简单的任务流程中。
***
### 10. HK_SimpleQuiz:
(引入了QF框架)简单的考题功能,目前包含了:单选题、多选题、判断题,可通过Json或Excel文件对题库进行配置其中通过Excel配置的方式只支持PC端。
***
### 11. HK_SplitAnim:
模型拆分动画控制功能,可在Scene视窗中对模型动画目标位置进行设置,方便进行管理。
***
### 13. HK_Tips:
三维场景中悬浮提示标签的工具。
***
### 14. HK_FileLoad:
(引入了QF框架,该模块仅可用于PC端)从电脑中读取图片、视频,并存储在StreamingAssets中。
***
### 15. HK_LoginRegister:
(引入了QF框架)用户注册登录功能模块,Server端是NodeJs的,客户端为Unity。
***