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,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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM