摄像机
|
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,ContentHeight 为 720 并打上对勾,Content Width 为 1280,为了在开发时可以看到效果,在 Game 视图中添加 1280x720的分辨率并使用)
- Roles
|
|
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
|
- 加载人物(Player,NPC)
- UI 加载路线
- SceneInit->SceneLoading->SceneLogin
- 跳转到下一个场景的时候应该有一个通用的Loading场景,在Loading中的脚本中根据传入的参数判断SceneManagement.LoadSceneAsync哪个资源(进度条)
- 当UI和人物联系比较强的时候(人物昵称跟随)
- 不要将UI直接放到人物上,原则是游戏对象和UI应该分开来放
- 在要放置UI的人物的地方创建一个EmptyObject用于定义
- 在UI层级下创建Label,再通过脚本定位
|
|
组件
|
进度条
|
- 配合UIProcessBar,SceneManagement.LoadSceneAsync实现(去网上找实现)
|
LoadingScene
|
|
Username跟随
|
|
文字上弹(HUD插件)
|
|
|
人物
|
- RoleController(添加Unity自带的CharacterController碰撞体)
- 包含AI(AI接口)
- 人物AI
- 怪物AI
- 出生点
- 巡逻范围
- 视野范围
- 锁定敌人
- 巡逻间隔
- 包含FSM(状态机),什么样的状态播放什么样的动画并且有什么逻辑操作(FSMController)
- 定义状态(类和enum)
- Idle
- Run
- 攻击
- 受伤
- 死亡
- 等等
- 状态分为几个阶段,都作为我们回调函数
- OnEnter
- OnUpdate
- OnExit
- FSMController
- ChangeState
- ToIdle
- ToRun
- ToAttack
- ToDie
- ToHurt
- MoveTo
- RoleInfo
- RoleInfoBase
- Hp
- Mp
- ServerId
- UserId
- 主角
- 怪物
|
|
灯光
|
- 场景中自然光源一个主一个辅助
- 大量使用点光源
- 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实现
|
|
|
|
|
|
|
|
|