摄像机

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)

包括

  • 主角
  • Boss
  • 怪物
  • NPC

  

  

目录结构

特定

  • Editor:放在此下面的脚本在创建 C# 脚本时会调用,可以实现自定义模板
  • Plugins/iOS/PC
  • Resources:预制体放在此目录下用于加载
  • StreamingAssets:在游戏运行时此目录是只读的
  • Hierachy:场景物体

通用

  • Editor
  • Plugins/iOS/PC
  • Resources
    • Role
    • UI
  • StreamingAssets
  • Audio
  • Effects
  • Scripts
    • Role
      • FSM(状态机)
    • UI
    • Utils
  • Scenes
  • Hierachy
    • Scene
    • Lights
    • UI Root(NGUI 插件要求,如果要发布到移动平台,需要将 Scaling Style 改为 Constrainted On Mobiles,Content Height 为 720 并打上对勾,Content Width 为 1280,为了在开发时可以看到效果,在 Game 视图中添加 1280x720的分辨率并使用)
    • Roles
      • NPCs
    • 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

  • 场景切换
  • 封装 SceneManagement

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实现(去网上找实现)

Loading Scene

  • 配合进度条

Username跟随

  • 见上文

文字上弹(HUD插件)

  • 调用 HUD Text 插件

人物

  • 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
    • AddEvent
    • Dispatch
  • 当接收到某个协议的消息时,进行广播(Dispatch)

服务器端

  • 账号服务器
    • Http(WebAPI)
  • 游戏服务器
    • 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

  • Anchors: Min 和 Max 单位是 %

      

Image

设置为 Sliced 进行缩放,选择 sliced类型,锁定到原图,点击 sprite editor 进行编辑

RawImage

放大图 Texture

Text

NGUI 中的label

特效(阴影等)

  • 在需要添加特效的组件上添加 Shadow等组件

动图

  • 导入 DOTween 插件
  • DoTween 扩展了 transform 组件,使用transform组件.Doxxx实现

  

  

  

  

  • 项目目录结构
  • Scenes/
  • UI/
  • Audio/
  • Materials/
  • Effects/
  • Resources/
    • UI/
    • Roles/
  • StreamingAssets/(初始资源)
  • Bundles/(项目资源更新)
    • version.txt
  • 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
      • extends EditorWindow
  • 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)
            • {
              • _sharedObject = new T();
            • }
            • 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
          • Container
        • UIViewWindowBase.cs
        • Views/
        • Controllers/
      • AssetBundle/
        • AssetBundleLoader.cs
        • AssetBundleLoaderAsync.cs
        • AssetBundleManager.cs
        • AssetBundleDownloader.cs
      • Camera/
        • CameraController.cs
      • 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
        • Debug();
      • ResourceManager.cs
      • AudioManager.cs
      • EnumDefs.cs
      • ConstDefs.cs
      • Global.cs
      • BufferStream.cs
        • extends MemoryStream
        • ReadShort()
        • WriteShort(value);
        • ReadInt();
        • WriteInt(value);
        • ReadString();
        • WriteString(value);

         
         

         
         

    • Extensions
      • GameObject.cs
        • GetOrCreateCompoent<T>()
    • Utils
      • StringUtil.cs
      • EncroptUtil.cs
  • 插件
    • UGUI HUD 文字上弹
    • AStarPathfinding Project
    • LitJson

Unity目录结构设置的更多相关文章

  1. VS下的解决方案目录结构设置和管理

    转载:http://blog.csdn.net/pl20140910/article/details/52074165 为了方便管理自己写的代码,也为了日后工作能方便的查找之前做过相同的代码,仿照某源 ...

  2. [转]Vs解决方案的目录结构设置和管理

    原文地址:[转]Vs解决方案的目录结构设置和管理 作者:大明   以下内容为“原创”+“转载” 首先,解决方案和项目文件夹包含关系(c++项目): VS解决方案和各个项目文件夹以及解决方案和各个项目对 ...

  3. VS 解决方案目录结构设置

    涉及到的配置: 项目编译时使用的中间目录: 项目链接的输出目录: 项目编译结束后,拷贝生成的 dll 和 lib 到指定目录: 项目编译结束后,拷贝需要的 dll 到输出目录: 设置项目的工作目录: ...

  4. ECMALL目录结构设置与数据库表

    [Ecmall]ECMALL目录结构设置与数据库表   最近在做ecmall的开发,ecmall在开源方面还有待进步啊,官方没有提供开发文档,也没有关于系统架构组织的贡献,使用者都要自己从0开始,官方 ...

  5. Vs 2008 解决方案的目录结构设置和管理(转)

    http://blog.csdn.net/lcj_cjfykx/article/details/8632459 MS的这个IDE,实在庞杂得恐怖.从大学开始,我就一直用VC的各个版本写程序至今,细细想 ...

  6. VC 2005 解决方案的目录结构设置和管理

    VC 2005 解决方案的目录结构设置和管理   Roger (roger2yi@gmail.com)   一个中等规模的解决方案通常都会包含多个项目,其中一些项目产出静态库,一些产出动态库,一些用于 ...

  7. 转: VS 解决方案目录结构设置

    https://www.cnblogs.com/zuibunan/p/3843459.html 下面的文章也有介绍 https://blog.csdn.net/lp310018931/article/ ...

  8. VS解决方案的目录结构设置和管理

    一个中等规模的解决方案通常都会包含多个项目,其中一些项目产出静态库,一些产出动态库,一些用于单元测试,还有的产出最终的应用程序执行档.除此以外,根据项目的需求,还会使用一些第三方的库.   所以为解决 ...

  9. Visual Studio解决方案的目录结构设置和管理

    摘至:http://blog.csdn.net/lp310018931/article/details/47991759 首先,解决方案和项目文件夹包含关系(c++项目): VS解决方案和各个项目文件 ...

随机推荐

  1. 数据可视化之 图表篇(四) 那些精美的Power BI可视化图表

    之前使用自定义图表,每次新打开一个新文件时,都需要重新添加,无法保存,在PowerBI 6月更新中,这个功能得到了很大改善,可以将自定义的图表固定在内置图表面板上了. 添加自定义图表后,右键>固 ...

  2. cnn卷积理解

    首先输入图像是28*28处理好的图. 第一层卷积:用5*5的卷积核进行卷积,输入为1通道,输出为32通道.即第一层的输入为:28*28图,第一层有32个不同的滤波器,对同一张图进行卷积,然后输出为32 ...

  3. 【JVM】或许,这就是二进制Class吧

    水稻:看你研究盯着这个文档一天了,什么玩意让人心驰神往 菜瓜:前几天意外得到一本武功秘籍<jvms8>,看起来就情不自禁 水稻:这不是Java虚拟机的说明文档吗<PS:投来惊吓的目光 ...

  4. oracle终止用户会话

    1.创建两个测试用户进行实验 执行命令如下: create user test1 identified by 1; create user test2 identified by 1; grant d ...

  5. ASP.NET Core静态文件处理源码探究

    前言     静态文件(如 HTML.CSS.图像和 JavaScript)等是Web程序的重要组成部分.传统的ASP.NET项目一般都是部署在IIS上,IIS是一个功能非常强大的服务器平台,可以直接 ...

  6. Alink漫谈(十二) :在线学习算法FTRL 之 整体设计

    Alink漫谈(十二) :在线学习算法FTRL 之 整体设计 目录 Alink漫谈(十二) :在线学习算法FTRL 之 整体设计 0x00 摘要 0x01概念 1.1 逻辑回归 1.1.1 推导过程 ...

  7. Redis中的Scan命令踩坑记

    1 原本以为自己对redis命令还蛮熟悉的,各种数据模型各种基于redis的骚操作.但是最近在使用redis的scan的命令式却踩了一个坑,顿时发觉自己原来对redis的游标理解的很有限.所以记录下这 ...

  8. 如何将elementUI 表格(el-table)和分页器(el-pagination)连接起来

    el-table表格的代码: <template> <el-table :data="tableData" style="width: 100%&quo ...

  9. JS闭包应用场景之函数回调(含函数的调用个人理解)

    首先我们来绑定一个函数给click事件,这个很好理解,就是创建一个匿名函数作为回调绑定给click事件,如下: 但如果我们想声明一个函数作为回调来绑定多个元素呢,例如下面(注意:绑定事件后不用加括号, ...

  10. java 之死循环

    public class StringTest { public static void main(String[] args) { System.out.println(getStringCount ...