1. 程式人生 > 實用技巧 >學習筆記--2020年12月30日

學習筆記--2020年12月30日

解耦合和遊戲資源管理

在開發的過程中,有大量資源需要管理,也需要儘量避免程式碼耦合。首先解耦合的問題可以看一下我的隨筆,裡面提供了一種對委託的封裝,可以使用委託解耦合;其次需要管理遊戲中的資源。

1.儘量使用查詢遊戲物體並獲取元件等方式得到指令碼中的元件,避免使用public再拖拽的方式賦值,因為大量的拖拽賦值不便於管理遊戲資源;

2.使用資源管理器管理資源

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[CreateAssetMenu(menuName = "=ManagerVarsContains
")] public class ManagerVars : ScriptableObject { }

建立一個指令碼,修改繼承使指令碼繼承自ScriptableObject而不是MonoBehaviour,在指令碼上添加註釋[CreateAssetMenu(menuName = "CreateManagerVars")],這樣編譯後就可以建立容器了

或者在project視窗中右鍵也可以建立容器

接下來為容器新增內容並提供獲取的get方法

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//[CreateAssetMenu(menuName = "ManagerVarsContainer")] public class ManagerVars : ScriptableObject { //提供靜態方法供其他指令碼呼叫獲取資源,不能在其他指令碼中使用new的方法獲取到這些資源 public static ManagerVars GetManagerVars() { return Resources.Load<ManagerVars>("ManagerVarsContainer"); } //管理的資源 public
List<Sprite> bgThemeSprites = new List<Sprite>(); }

值得注意的是,使用Resources.Load的方法載入檔案的時候檔案必須放到Resources資料夾下,沒有這個資料夾可以自己建立。同時建立好容器後就可以將[CreateAssetMenu(menuName = "=ManagerVarsContains")]註釋掉了。

在Inspector視窗中開啟容器,使用拖動的方式進行賦值即可。

    private ManagerVars managerVarsContainor;

    private void Awake()
    {
        managerVarsContainor = ManagerVars.GetManagerVars();
    }

接下來在其他指令碼中呼叫ManagerVars.GetManagerVars方法就可以獲取到容器了,通過容器可以獲取到容器中管理的資源。