高度な Unity Architect: Red Dot システムのアーキテクチャと設計

面接でレッド ドット システムの設計方法をよく質問されることがありますが、この記事ではレッド ドット システムの設計方法、インターフェイス、完全な実装について詳しく紹介します。

レッドドットシステムの要件分析

まず、レッド ドット システムの設計要件を分析しましょう。厳密に言うと、レッド ドット システムはフレームワークに属していませんが、ゲーム ロジックに属しているため、コードは一般的なフレームワークに属さないため、コードを配置すべきではありません。基本サービスへ。これは、ゲーム ロジック開発における未処理の情報を思い出させることを目的としています。ユーザーにとっては、レッド ドット システムがインターフェイスとサービスを直接提供し、特定のノードの下にレッド ドットを簡単に表示して特定の場所に設定できることを望んでいます。ユーザーは、赤い点の「見た目」、赤い点の作成方法、赤い点の作成と破壊を繰り返すパフォーマンスなどを気にする必要はありません。

右!ここにはゲーム好きの初心者からゲーム開発に携わる技術者までが集まるゲーム開発交流会があり、交流や学びにぜひお越しください。

需要分析から、「Red Dot System」が提供する外部インターフェイスは次のとおりであると結論付けられます。

1: インターフェイス「CreateRedPoint」を作成して「赤い点」ノードを作成し、そのノードをユーザーに返します。ユーザーは赤い点を配置する場所を決定します。

2: レッド ポイント ノードを削除および破棄するインターフェイス「DestroyRedPoint」を作成します。

3: インターフェイス「SetRedPointValue」を書き込み、赤い点ノードを渡し、赤い点に特定の値を設定します。

4: インターフェイス「DestroyAllRedPoints」を作成します。これは、UI インターフェイスが破棄されたときに、UI インターフェイスの下にあるすべての赤いポイントを削除してリサイクルするために使用されます。

「Red Dot System」は頻繁にノードの作成と削除を行うため、内部的にはノードプールモードを採用しており、パフォーマンスを最大限に高めることができます。

Red Dot システムが依存する基本サービス

red dot システムは完全に独立しているわけではなく、フレームワークの基本サービスに依存しています。1 つは主に red dot ノード リソースのロードを担当するリソース管理で、もう 1 つはノード プール管理モジュールです。リソース管理モジュールのサンプル コードでは YooAssets を使用しており、赤い点のノードがプレハブ化され、YooAssets を通じて収集およびパッケージ化され、コードを通じてノード リソースが読み込まれます。レッド ポイント システムは内部的にノード プール メカニズムに基づいているため、レッド ポイント ノードに対して一意のノード プールを作成する必要があります。

YooAssetsのバージョン: 1.5.2

リソース管理 ResMgr: YooAssets に基づく同期/非同期リソース管理

ノード プール: 自分で実装します。詳細についてはコードを参照してください。

赤いポイント ノード プレハブ: 次の図に示すように、RedPoint ノードの下に 2 つの子ノード (赤い円形のエルフとテキスト ラベル) があり、数字の表示に使用されます。

レッドドットシステムコードの具体的な実装

どのノードが赤いポイントであるかをマークするために、コンポーネントから継承して RedPointFlag コンポーネントを作成します。このコンポーネントの機能は、この Flag コンポーネントを使用して、UI インターフェイスが破棄されたときにすべての「赤いポイント」を検索し、それらを一緒にリサイクルすることです。

パブリック クラス RedPointFlag : コンポーネント

{

}

RedPointMgr のグローバル シングルトンを作成して、「レッド ポイント」サービスを提供します。Init インターフェイスを提供します。Init 中に、赤い点のノード プールが作成されます。コードは以下のように表示されます。

パブリック クラス RedPointMgr : UnitySingleton<RedPointMgr>

{

public void Init() {

NodePoolMgr.Instance.AddNodePool("GUI/Prefabs/RedPoint.prefab", 10);

}

}

CreateRedPoint インターフェイス:

public GameObject CreateRedPoint() {

GameObject redPoint = NodePoolMgr.Instance.Get("GUI/Prefabs/RedPoint.prefab");

if (redPoint.GetComponent<RedPointFlag>() == null) {

redPoint.AddComponent<RedPointFlag>();

}

redPoint を返します。

}

このインターフェイスには特別な注意を払う必要があり、後ですべての赤い点を見つけやすくするために、RedPointFlag コンポーネント インスタンスを赤い点のノードに追加します。

SetRedPointValue インターフェイス:

public void SetRedPointValue(GameObject redPoint, int value) {

var label = redPoint.GetComponentInChildren<Text>();

label.text = value.ToString();

}

これは、赤い点に対応する表示値を設定するために使用されます。原理は比較的単純です。赤い点内の Text コンポーネントを見つけて、Text コンポーネントの表示内容を変更するだけです。

RedPoint インターフェースを破棄します。

public void DestroyRedPoint(GameObject redPoint) {

NodePoolMgr.Instance.Recycle("GUI/Prefabs/RedPoint.prefab", redPoint);

}

赤い点を削除します。これは主にノード プールのリサイクルを呼び出すためです。

DestroyAllRedPoint インターフェイス:

public void DestroyAllRedPoint(GameObject uiRoot) {

RedPointFlag[] redPoints = uiRoot.GetComponentsInChildren<RedPointFlag>();

for (int i = 0; i < redPoints.Length; i++) {

NodePoolMgr.Instance.Recycle("GUI/Prefabs/RedPoint.prefab", redPoints[i].gameObject);

}

}

すべての赤い点を削除します。ここでは RedPointFlag コンポーネントを使用します。このコンポーネントですべてのノードをフィルタリングすることで、赤い点のノードが得られます。次に、すべてのノードをリサイクルします。

次に、簡単な使用例を示します。非常にシンプルで便利です。UI コード内に赤い点を作成し、インターフェイスが破棄されるときにすべての赤い点を削除します。

パブリック クラス UIHomeCtrl : MonoBehaviour

{

// 最初のフレーム更新の前に Start が呼び出されます

void Start()

{

変換ルート = this.transform.Find("Bottom/start/btnStart");

var redPoint = RedPointMgr.Instance.CreateRedPoint();

redPoint.transform.SetParent(root, false);

redPoint.transform.localPosition = 新しい Vector3(120, 40, 0);

RedPointMgr.Instance.SetRedPointValue(redPoint, 20);

}

プライベート void OnDestroy()

{

RedPointMgr.Instance.DestroyAllRedPoint(this.gameObject);

}

}

「今日の共有はこれで終わりです。完全なコードが必要な場合は、私たちをフォローして完全なコードを入手してください。」

おすすめ

転載: blog.csdn.net/voidinit/article/details/135884026