2018(C)QFrameworkクイックスタートを構築するためのユニティゲームフレームワーク

序文

QFramework開発は、3年が経ちましたこれまでのところ、完全な導入を行っていません。その理由は、急速な反復で、過去に、QFrameworkことで、APIの変化が比較的大きいです。

この日に、QFramework現在のバージョン(v0.0.7)が安定している、あまり変化はありません、これは、この記事を書くための機会です。

この部分は、すなわち、QFramework 3つのコアモジュールについて説明します。

  • リソース管理モジュールRESキット
  • UI 框架 UI Kit
  • 実行ノードシステムアクションキット

次のようなディレクトリ構造に対応するQFramework:

画像

v0.0.7バージョンに使用されるこの記事のQFrameworkバージョンは、記事末尾に指定されたアドレスをダウンロードしてください。

RESキットクイックスタート

APIのRESKITユーザーが最も頻繁にのみResLoaderこのクラスを使用していました。意味として言葉は、ResLoaderデューティは負荷サービスにリソースを提供することです。

たとえば、次のように、Resourcesディレクトリの下にリソースをロードします。

// allocate a loader when initialize a panel or a monobehavour
var loader = ResLoader.Allocate();

// load someth in a panel or a monobehaviour
var smobjPrefab = loader.LoadSync<GameObject>("Resources/smobj");

var bgTexture = loader.LoadSync<Texture2D>("Resources/Bg");

var gameObjPrefab = loader.LoadSync("Resources/gameObj") as GameObject;


// resycle this panel/monobehaivour loaded res when destroyed 
loader.Recycle2Cache();
loader = null;

コードは、このAPI ResLoader.Allocate()がありました。中国の意味を割り当て、1つのオブジェクトコンテナからResLoaderアプリケーションプールことを意味し、「アプリケーション」です。私たちは、直接)(新しいResLoaderとして理解することができます。

そのアンチテーゼは、このオブジェクトがResLoaderが回復していることを意味し、コードの断片loader.Recycle2Cache()このAPIです。

loader.Recycle2Cache()は2つのことを行います。

  • フラッシュ操作に一度リソースを負荷のResLoaderください。
  • この回復プールResLoaderは、オブジェクトコンテナにオブジェクト。あなたは直接、うまく動作するものとして理解オブジェクトを破壊することができます。

また、そこにResLoader.LoadSyncこのAPIは、文字通り、負荷に同期されます。自分のジェネリック型を入力するには、このようResLoader.LoadSync <ゲームオブジェクト>(「リソース/ SomeObj」);

渡されたパラメータは、リソースをロードするためのパスです。接頭プラス「リソース/」場合は、リソースディレクトリ内のリソースをロードします。そうでない場合、それはデフォルトのリソースローディングAssetBundleです。ここでは、どのようなリソースにAssetBundleをロードするには?

AssetBundleを使用するには、まずAssetBundleで作られなければなりません。

AssetBundle RESキットの生産は非常に簡単です。

準備:

  • @ResKitマークAssetBundleを選択し、リソースまたはフォルダを右クリックします。この操作は、マーキング操作です。
  • ビルドパネルへのショートカットコマンド/ Ctrlキー+ Shiftキー+ Rのポップアップリソースは、必ずシミュレーションモードのチェックボックスをオンにします。

このようなAssetBundleの準備は完了です。

コード内でAssetBundleリソースをロードします。

// init res mgr before load asset bundle
ResMgr.Init();

// allocate a loader when initialize a panel or a monobehavour
var loader = ResLoader.Allocate<ResLoader>();

// load someth in a panel or a monobehaviour
var smObjPrefab = loader.LoadSync<GameObject>("smObj");

var bgTexture = loader.LoadSync<Texture2D>("Bg");

var logoTexture = loader.LoadSync<Texture2D>("hometextures","logo");

// resycle this panel/monobehaivour loaded res when destroyed 
loader.Recycle2Cache();

loader = null;

コードコードとリソースをロードするリソースは非常に似ています。

コードは非常に最初に見つけることができResMgr.Init()操作を持っていました。

この操作は、一般的にゲーム開始時に、主にAssetBundleと資産構成テーブルを解決ResMgr.Init、一度呼び出されます。そして、この設定は自動的言っても過言ではないAssetBundleの生産で生成され、記事の裏に簡潔に説明します。

APIまたはLoadSyncをロードしますが、着信リソースのリソース/プレフィックスのパスではありません。このAPIは、着信ASSETNAME、不要な入ってくるAssetBundleNameをサポートしています。リソースは、同じ名前がある場合は、それが対応するAssetBundleNameに渡すことができます。

リソースディレクトリの下にリソースとAssetBundle負荷のリソースをサポートに加えて、またパスとネットワーク資源の多様性をサポートしています。

OK、RESキットクイックスタートはここに紹介します。

UIキットクイックスタート

UIキットは、UI開発キットでQFrameworkあります。これは、管理UI、UIコンポーネント機構を蓄積することができ、簡単なロジック分離性能アーキテクチャルールのセットを統合します。

どのようにUIインターフェースを作るには?

最初のステップ:UIRootは階層にドラッグ

画像

見ることができ、デザインを戦い、シナリオが実行されているとき、すべてがデザインノードの下に表示されなくなりますとインタフェースするように設計されています。

ステップ2:任意のインターフェイスを戦う良い、UIMarkを追加するには、コード内のスクリプトの制御を取得したいです。
画像

第三段階:パネルはどこにでも配置プレハブ(資産に推奨/アート/ UIPrefab)に作られたが、プレハブ、選択@ResKitを右クリック - UIのコードを生成するUIコードを作成します。

画像

次のようにコードの位置を生成します。

画像

第四段階UIスクリプトの書き込み

/****************************************************************************
 * 2018.6 凉鞋的MacBook Pro (2)
 ****************************************************************************/
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using QFramework;

namespace QFramework.Example
{
    public class UIHomePanelData : UIPanelData
    {
        // TODO: Query Mgr's Data
    }

    public partial class UIHomePanel : UIPanel
    {
        protected override void InitUI(IUIData uiData = null)
        {
            mData = uiData as UIHomePanelData ?? new UIHomePanelData();
            //please add init code here
        }

        protected override void ProcessMsg (int eventId,QMsg msg)
        {
            throw new System.NotImplementedException ();
        }

        protected override void RegisterUIEvent()
        {
            BtnStartGame.onClick.AddListener(() =>
            {
                Log.E("开始按钮点击");
            });
        }

        protected override void OnShow()
        {
            base.OnShow();
        }

        protected override void OnHide()
        {
            base.OnHide();
        }

        protected override void OnClose()
        {
            base.OnClose();
        }

        void ShowLog(string content)
        {
            Debug.Log("[ UIHomePanel:]" + content);
        }

        UIHomePanelData mData = null;
    }
}

テストインタフェースの第五ステップ

  • シーンにTestUIHomePanelという名前のゲームオブジェクトを作成します。
  • ハングUIPanelTesterスクリプト、パネル名を入力してください。

画像

  • プレハブUIはAssetBundleをラベル。
  • 実行します。

あなたは、画面を見ることができます。

もちろん、コードとページが比較的単純で開きます。

UIMgr.OpenPanel<UIHomePanel>();

OK、UIKitのクイックスタートはここに書いています。

ActionKitクイックスタート

ActionKitは、管理上の問題に非同期ロジック、非同期ロジックは日々発展に管理するために、多くの場合、より困難であるが、また、スタイルのコードに大きな違いを解決するために設計されています。私たちの共通のトゥイーンアニメーションを含め、このようなxxxは真であるとき、「再生するサウンドを再生し、イベントが終了します」として「」トリガーされる非同期ロジックで、以上の非同期ロジックを使用することができますExecuteNodeを、それらをカプセル化します。このように考案されたNodeSystemに触発され、cocos2dCCAction

ActionKit二つの基本的な概念ノードとアクションがあります。

  • 操作コマンドのアクション。
  • アクションコンテナのノード。

財団ノード

1.遅延ノード:DelayAction

することにより、この(MonoBehaviour)コールバックトリガ遅延。

this.Delay(1.0f, () =>
{
    Log.I("延时 1s");
});

適用することによってDelayNodeのオブジェクトを使用し、この(MonoBehaviour)コールバックトリガ遅延を。

var delay2s = DelayAction.Allocate(2.0f, () => { Log.I("延时 2s"); });
this.ExecuteNode(delay2s);

使用更新は、コールバックの遅延をドライブ。

private DelayAction mDelay3s = DelayAction.Allocate(3.0f, () => { Log.I("延时 3s"); });

private void Update()
{
    if (mDelay3s != null && !mDelay3s.Finished && mDelay3s.Execute(Time.deltaTime))
    {
        Log.I("Delay3s 执行完成");
    }
}

FEATUREID:CEDN001

2.イベントノード:EventAction

つまり、などの単語eventActionイベントを配布され、。おそらく、一人でその価値を発揮しますが、中にはありませんコンテナノード彼が不可欠です。

適用することでEventActionのオブジェクトを、使用してこの(MonoBehaviour)トリガイベントの実行を。

var eventAction = EventAction.Allocate(() => { Log.I("event 1 called"); }, () => { Log.I("event 2 called"); });
this.ExecuteNode(eventAction);

使用アップデートは、コールバックをドライブ。

private EventAction mEventAction2 = EventAction.Allocate(() => { Log.I("event 3 called"); }, () => { Log.I("event 4 called"); });

private void Update()
{
    if (mEventAction2 != null && !mEventAction2.Finished && mEventAction2.Execute(Time.deltaTime))
    {
        Log.I("eventAction2 执行完成");
    }
}

FEATUREID:CEEN001

ベースコンテナ

1.Sequence

SequenceNodeのノードであることを意図しているように、ワードシーケンスコンテナノードは、順序の子ノードに応じて行ってもよいし、各ノードは次のノードの前に完全に行います。

することにより、この(MonoBehaviour)コールバックトリガ遅延。

this.Sequence()
    .Delay(1.0f)
    .Event(() => Log.I("Sequence1 延时了 1s"))
    .Begin()
    .DisposeWhenFinished() // Default is DisposeWhenGameObjDestroyed
    .OnDisposed(() => { Log.I("Sequence1 destroyed"); });

適用することによってSequenceNodeのオブジェクトを使用し、この(MonoBehaviour)トリガ・ノードの実行を。

    var sequenceNode2 = SequenceNode.Allocate(DelayAction.Allocate(1.5f));
    sequenceNode2.Append(EventAction.Allocate(() => Log.I("Sequence2 延时 1.5s")));
    sequenceNode2.Append(DelayAction.Allocate(0.5f));
    sequenceNode2.Append(EventAction.Allocate(() => Log.I("Sequence2 延时 2.0s")));

    this.ExecuteNode(sequenceNode2);

    /* 这种方式需要自己手动进行销毁
    sequenceNode2.Dispose();
    sequenceNode2 = null;
    */

    // 或者 OnDestroy 触发时进行销毁
    sequenceNode2.AddTo(this);

使用アップデートは実行を駆動します。

private SequenceNode mSequenceNode3 = SequenceNode.Allocate(
            DelayAction.Allocate(3.0f),
            EventAction.Allocate(() => { Log.I("Sequence3 延时 3.0f"); }));

private void Update()
{
    if (mSequenceNode3 != null 
        && !mSequenceNode3.Finished 
        && mSequenceNode3.Execute(Time.deltaTime))
    {
        Log.I("SequenceNode3 执行完成");
    }
}

private void OnDestroy()
{
    mSequenceNode3.Dispose();
    mSequenceNode3 = null;
}

ここでOK、ActionKitクイックスタート

優位

RESキット:

  • 使いやすいです。

  • 各ResLoader参照カウントの経営資源は、負荷を軽減するために脳を繰り返しロード、アンロードおよびその他の問題の繰り返しを引き起こすことはありません。
  • シミュレーションモードモードは常に、AssetBundleを構築し、開発を加速し、時間のコストを削減する必要はありません。
  • ResLoaderは唯一のリソースディレクトリ構造の変化は、人件費を削減し、コードを変更する必要がないときは、着信ASSETNAMEをサポートしています。
  • 経営資源とAssetBundlesリソースに加えて、だけでなく、ネットワークリソースとローカルリソースのローディングをサポートし、インターフェースは、より柔軟にカスタマイズすることができます。
  • 一般的な市場のAssetBundleManagerと他の利点。

UIキット:

  • 使いやすいです。

  • コード生成、時間保存してtransform.Find(「XXX」)を避ける。GetComponent このAPIの準備がたくさん。
  • UIComponent UIスペースが簡単に蓄積チームのUIコントロールに、多重化およびモジュラーすることができます。
  • そして、パフォーマンスデータのセットは、別々の構造(非MVC)を使用することをお勧めします。
  • 一般的な市場というUIManagerと他の利点。

アクションキット:

  • 使いやすいです。

  • 複雑な非同期ロジック明確な方法を書きます。
  • スケーラブルおよびTweenは、アニメーションが、ネットワークは次のように要求したすべての非同期操作を整理します。
  • 組成物は、状態機械とすることができるからです。
  • それ自体は軽量な行動ツリーのセットです。
  • チェーンのサポート。

その後の記事では、我々は構造、モジュール構造、クイックスタートや各モジュールの推奨される使用、およびQFrameworkが導入された他のいくつかの視点を提出します。

OK、最初に今日ここに。

住所転載を指定してください:サンダルノート:liangxiegame.com

もっと

  • QFramework住所:https://github.com/liangxiegame/QFramework
  • QQ交換基:623 597 263
  • Unityは、小さなクラスを進めました
    • メインのトレーニングコンテンツ:
      • Frameworkのセットアップトレーニング(初年度)
      • シェーダと一緒にケーススタディ(初年度)
      • 副業インキュベーション(二年、三年目)
    • 講義の形での株式の具体的な詳細は、などがご覧下さい「小さなクラスの製品マニュアル」 HTTPS:://liangxiegame.com/master/introを
  • いいえ国民の関心ん:初めての更新通知を取得liangxiegame、そしてより多くの無料コンテンツ。

おすすめ

転載: www.cnblogs.com/liangxiegame/p/12467237.html
おすすめ