摄像机 | Main Camera | 跟随主角移动,不看 UI | 剧情摄像机 | 当进入剧情时,可以关闭 main camera,启用剧情摄像机,不看 UI | UI 摄像机 | 看 UI |
|
Unity编辑器常用的settings | - File->Build Settings
- File->Build Settings->Player Settings
- File->Build Settings->Player Settings->Other Settings
Edit->Project Settings
|
坐标 | - Unity 中 Z 轴朝前(在本地坐标中)
- 默认在 Transform 中看到的是本地的坐标,角度,缩放
|
控制器 | 分类 | - 主角控制器(移动,打怪 )
- 怪物控制器(巡逻,打主角)
- NPC 控制器(没有 AI,没有移动,仅仅是发布任务等简单的功能)
| | |
|
精灵(Sprite) | |
目录结构 | 特定 | - Editor:放在此下面的脚本在创建 C# 脚本时会调用,可以实现自定义模板
- Plugins/iOS/PC
- Resources:预制体放在此目录下用于加载
- StreamingAssets:在游戏运行时此目录是只读的
- Hierachy:场景物体
| 通用 | - Editor
- Plugins/iOS/PC
Resources
- StreamingAssets
- Audio
- Effects
Scripts
- Scenes
Hierachy
- Scene
- Lights
- UI Root(NGUI 插件要求,如果要发布到移动平台,需要将 Scaling Style 改为 Constrainted On Mobiles,Content Height 为 720 并打上对勾,Content Width 为 1280,为了在开发时可以看到效果,在 Game 视图中添加 1280x720的分辨率并使用)
Roles
- Global(存放全局)
|
|
tag | |
layer | - 用于检测碰撞
- 默认都为 default layer 中
- 层之间的碰撞关系在 Edit->ProjectSettings->Physics->Layer Collision Matrix, 默认都是打上勾的,根据需要打勾
|
射线 | API | Raycast | 如果中间被挡住了就不会继续了 | RaycastAll | 射线一串到底 | Physics.OverlapSphere(pos, radius, layerMask) | 检测周围 |
|
|
图集(atlas) | 创建 | - 导入 NGUI 插件
- NGUI->Open->Atlas Maker, 在 assets 中选择需要创建的图集的图片,在 Atlas Maker 中会出现对应的列表,为了优化,我们需要创建正方形(且边长为2的幂次方)的图集,所以去掉 Unity Packer,选择 Force Square
| 用途 | 整理 UI 的需要的图片 | 优化 | - 选择需要优化的图集
- 在属性面板中 Texture type 选择 Advanced
- 去掉 Generate Mip Map 的勾
点击 Apply
|
|
设计原则 | UI | - 创建 UIViewBase,UIVIewWindowBase,UIViewSceneBase 表示 View
UIViewBase | 添加 OnAwake,OnStart,OnUpdate,OnDestroy 等虚方法用于被子类继承,继承 MonoBehavior,UIBase 中的 Awake,Start,Update等分别调用 Onxxx方法 |
- ResourceManager,SceneManager,WindowManager,UILayerManager 作为单例对象全局使用,ResourceManager 封装 Resouces.Load,SceneManager 和 WindowManager 封装 ResourceManager
SceneManager | | UILayerManager | - 设置层级
- 添加 canvas 子组件,设置order
| ResourceManager | - 封装 Resources.Load,终于加在预制体,如果加载场景,使用 SceneManagement.LoadScene
| RoleManager | |
UI 加载路线
- SceneInit->SceneLoading->SceneLogin
- 跳转到下一个场景的时候应该有一个通用的Loading场景,在Loading中的脚本中根据传入的参数判断SceneManagement.LoadSceneAsync哪个资源(进度条)
当UI和人物联系比较强的时候(人物昵称跟随)
- 不要将UI直接放到人物上,原则是游戏对象和UI应该分开来放
- 在要放置UI的人物的地方创建一个EmptyObject用于定义
- 在UI层级下创建Label,再通过脚本定位
| 组件 | 进度条 | - 配合UIProcessBar,SceneManagement.LoadSceneAsync实现(去网上找实现)
| Loading Scene | | Username跟随 | | 文字上弹(HUD插件) | |
| 人物 | |
|
灯光 | - 场景中自然光源一个主一个辅助
大量使用点光源
- Roads
- Plants
- Buildings
- Miscs
- 光源都是baked的
- Window->Lighting->烘焙
|
设计模式 | 单例 | 继承MonoBehavior的类 | 代码 | public static 类 _instance;
public 类 Instance()
{
if (_instance == null)
{
GameObject go = new GameObject("类名(只用于标识)");
// 切换场景时不销毁,全局有效
DontDestroyOnLoad(go);
_instance = Util.AddComponentForGameObject<类>(go);
}
return _instance;
} | 类 | |
| 不继承MonoBehavior的类 | 代码 | public static 类 _instance;
private 类()
{
}
public 类 Instance()
{
if (_instance == null)
{
_instance = new 类();
}
return _instance;
} |
|
| 观察者 | 就是实现一个 EventListener
- 当接收到某个协议的消息时,进行广播(Dispatch)
|
|
服务器端 | 账号服务器
游戏服务器
- Socket编程,使用观察者模式
- Socket包压缩与安全维护
|
客户端 | |
Unity窗口插件开发 | 代码模式切换工具(通过宏定义) | 代码 | - 脚本创建在 Editor目录下
- 要出现菜单,需要添加 MenuItem Attribute
- 如果要弹出一个窗口,类需要继承 EditorWindow
| 定义宏的编辑器位置 | |
| AssetsBundle 批量导出到 AssetsBundle | | | |
|
API | - Application.dataPath: 编辑器模式下的项目地址
- Application.persistentDataPath: 发布模式下的程序地址
|
UGUI | Canvas | 模式 | Screen Space - Overlay | 不需要UI Camera,UI将永远在所有摄像机最前面 | Screen Space - Camera(常用) | 需要UI Camera | Screen Space - WorldSpace | Canvas 可以移动了(默认它的 Rect Transform 组件继承自 Transform 并且不可变) |
| 自适应分辨率 | - Scale With Screen Size 可以自定义分辨率
| 层级管理 | - 给 Panel(可见的窗口)添加一个 Canvas 组件,勾选Override Sorting 设置 Order In Layer 序号
|
| Rect Transform | | Image | 设置为 Sliced 进行缩放,选择 sliced类型,锁定到原图,点击 sprite editor 进行编辑 | RawImage | 放大图 Texture | Text | NGUI 中的label | 特效(阴影等) | | 动图 | - 导入 DOTween 插件
- DoTween 扩展了 transform 组件,使用transform组件.Doxxx实现
|
|
| |
| |
- 项目目录结构
- Scenes/
- UI/
- Audio/
- Materials/
- Effects/
Resources/
- StreamingAssets/(初始资源)
Bundles/(项目资源更新)
- Models/
Editor/
Menu.cs
- [MenuItem("Left God/Debug Window")]
- public static void DebugWindow()
{
- DebugWindow debugWindow = EditorWindow.GetWindow<DebugWindow>();
- debugWindow.titleContent = new GUIContent("Debug Window");
- debugWindow.Show();
- }
- …
DebugWindow.cs
Scripts/
- Test/
Protocols/
Core/
EventCenter(观察者)
- extends Singleton
- Dispatch
Singleton.cs
- public Singleton<T> where T : new()
{
- private static T _sharedObject;
- public static T SharedObject()
{
- if (_sharedObject == null)
{
- }
- return _sharedObject;
- }
- }
SingletonMono.cs
- public SingletonMono<T> where T : Compoent
{
- private static T _sharedObject;
- public static T SharedObject()
{
- if (_sharedObject == null)
{
GameObject gameObject = new GameObject(nameof(T));
DontDestroyOnLoad(gameObject);
_sharedObject = gameObject.GetOrCreateCompoent<T>();
- }
- return _sharedObject;
- }
- }
Network/
- NetworkHttpClient.cs
- NetworkSocketClient.cs
UI/
- UISceneManager.cs
- UIWindowManager.cs
- UILayerManager.cs
- UIViewBase.cs
UIViewSceneBase.cs
- UIViewWindowBase.cs
- Views/
- Controllers/
AssetBundle/
- AssetBundleLoader.cs
- AssetBundleLoaderAsync.cs
- AssetBundleManager.cs
- AssetBundleDownloader.cs
Camera/
- EffectManager.cs
Role/
AI/
- IRoleDoAI.cs
- IMonsterDoAI.cs
- IDoAI.cs
FSM/
- FSMManager.cs
RoleStates
RoleStateAbstract.cs
- OnEnter()
- OnUpdate()
- OnExit()
- RoleStateIdle.cs
- RoleStateHurt.cs
- RoleStateAttack.cs
- RoleStateDie.cs
- RoleStateRun.cs
- …
- RoleController.cs
- RoleManager.cs
Logger.cs
- ResourceManager.cs
- AudioManager.cs
- EnumDefs.cs
- ConstDefs.cs
- Global.cs
BufferStream.cs
- extends MemoryStream
- ReadShort()
- WriteShort(value);
- ReadInt();
- WriteInt(value);
- ReadString();
- WriteString(value);
Extensions
Utils
- StringUtil.cs
- EncroptUtil.cs
插件
- UGUI HUD 文字上弹
- AStarPathfinding Project
- LitJson
来源:https://www.cnblogs.com/megachen/p/12636342.html