zoukankan      html  css  js  c++  java
  • Unity 笔记

    摄像机

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

    LoadingScene

    • 配合进度条

    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实现
         
    1. 项目目录结构
    • 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
    1. 插件
    • UGUI HUD 文字上弹
    • AStarPathfinding Project
    • LitJson
  • 相关阅读:
    POJ 3041 Asteroids 最小点覆盖 == 二分图的最大匹配
    POJ 3083 Children of the Candy Corn bfs和dfs
    POJ 2049 Finding Nemo bfs 建图很难。。
    POJ 2513 Colored Sticks 字典树、并查集、欧拉通路
    POJ 1013 Counterfeit Dollar 集合上的位运算
    POJ 2965 The Pilots Brothers' refrigerator 位运算枚举
    无聊拿socket写的100以内的加法考试。。。
    POJ 1753 Flip Game
    初学socket,c语言写的简单局域网聊天
    汇编语言 复习 第十一章 标志寄存器
  • 原文地址:https://www.cnblogs.com/megachen/p/12310846.html
Copyright © 2011-2022 走看看