0基礎學KBEngine基礎學習筆記之二


0基礎學KBEngine基礎學習筆記之二

緊接着上一篇,上一篇KBE老大指出我對實體的概念有所欠缺,目前我也沒有什么新的感悟,也只有期待之后的研究的時候靈感曇花一現了。

其實很多東西就是臨門一腳,如果你看明白了我上一篇的一些概念,接下來有能力的人老早在我寫這篇文章之前跑通流程,在寫自己的邏輯了。

順便提個建議,論壇發帖是否可以支持 markdown ?

接下來我們從零開始走通一下通信流程:

1.下載服務器模板 minimum_project, 解壓 to your %KBE_ROOT% folder,然后重命名kbengine_my_assets。點擊目錄下的start_server.bat。

2.png

3.png

2.打開之前我們跑通的 kbengine_unity3d_demo, 再導入一個NGUI插件,如下建立一個場景。

4.png

關於地址和端口的設置默認在 %KBE_ROOT%kbe/res/server/kbengine_defs.xml下

5.png

如果你需要改變引擎設置, 請在({assets}/res/server/kbengine.xml)中覆蓋kbe/res/server/[kbengine_defs.xml]的對應參數來修改, 這樣的好處是不會破壞引擎的默認設置,在你更新引擎時也不會產生沖突,以及在多個邏輯項目時不會影響到其他的項目設置。

3.點擊啟動,你會發現一堆log,主要是一些初始化工作,我們先暫時跳過。Ngui 建立一個登陸界面如下:

6.png

簡單的控制腳本代碼

using KBEngine;
using UnityEngine;
using System;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.Linq;

public class LoginPanelHandler : MonoBehaviour {

    public UIInput inPut_Name;
    public UIInput inPut_PassWord;

    public UIButton btn_Login;
    public UIButton btn_Register;

    public string stringAccount { get { return inPut_Name.value; } }
    public string stringPasswd { get { return inPut_PassWord.value; } }


    void Start()
    {
       EventDelegate.Add(btn_Login.onClick,btn_Login_OnClick);
       EventDelegate.Add(btn_Register.onClick, btn_Register_OnClick);

       KBEngine.Event.registerOut("onCreateAccountResult", this, "onCreateAccountResult");
       KBEngine.Event.registerOut("onLoginSuccessfully", this, "onLoginSuccessfully");
    }
}

創建賬號:

public void btn_Register_OnClick()
{
    Debug.Log("LoginPanelHandler => "+"Register ::"+"stringAccount:" + stringAccount + "stringPasswd:" + stringPasswd);

    KBEngine.Event.fireIn("createAccount", stringAccount, stringPasswd, System.Text.Encoding.UTF8.GetBytes("kbengine_unity3d_demo"));
}
public void onCreateAccountResult(UInt16 retcode, byte[] datas)
{
    if (retcode != 0)
    {
        Debug.LogError("createAccount is error(注冊賬號錯誤)! err=" + KBEngineApp.app.serverErr(retcode));
        return;
    }

    if (KBEngineApp.validEmail(stringAccount))
    {
        Debug.LogError("createAccount is successfully, Please activate your Email!(注冊賬號成功,請激活Email!)");
    }
    else
    {
        Debug.LogError("createAccount is successfully!(注冊賬號成功!)");
    }
}

登錄賬號:

public void btn_Login_OnClick()
{
    Debug.Log(" LoginPanelHandler =>" + "Login ::" + "stringAccount:" + stringAccount + "stringPasswd:" + stringPasswd);

    if (stringAccount.Length > 0 && stringPasswd.Length > 5)
    {
        KBEngine.Event.fireIn("login", inPut_Name.value, stringPasswd, System.Text.Encoding.UTF8.GetBytes("kbengine_unity3d_demo"));
    }
    else
    {
        Debug.LogError("account or password is error, length < 6!(賬號或者密碼錯誤,長度必須大於5!)");
    }
}

public void onLoginSuccessfully(UInt64 rndUUID, Int32 eid, Account accountEntity)
{
    Debug.Log("login is successfully!(登陸成功!)");
}

關於賬號的創建登錄流程我就簡單說明一下,我們主要還是考慮實現一下登錄之后的簡單通信。 具體可以參考下方的 KBEngine簡單RPG-Demo源碼解析 參考鏈接

總之就是你創建賬號后登錄,

loginApp處理登錄轉發, 客戶端接收 "KBEngine::Client_onLoginSuccessfully:",

然后baseApp處理登錄請求,baseApp 建立第一個 Account 實體,客戶端接收 "KBEngine::Client_onCreatedProxies"。client 建立第一個 Account 實體, 調用 init()。(init 這個函數在Python中表示構造函數,所以 c# 也要調用一下)

(ps: Account.cs 中注釋掉 baseCall("reqAvatarList");)

public override void __init__()
{
    Event.fireOut("onLoginSuccessfully", new object[]{KBEngineApp.app.entity_uuid, id, this});
    //baseCall("reqAvatarList");
}

4.第一個實體通信

很好,按照上一篇幅的說法,baseApp 和 client 都有了 同一個 Account 實體, 只是在不同進程維護。

然后我們請求一下 Account 的 Avatar 列表, 其實我剛開始挺糾結 Avatar 是定義為實體 還是定義為Account的base數據。參考官方的Demo是定義為實體,然后替換 Acoount 成為新的 client 實體。

流程如下:

* 定義Avatar實體

* 實現Account base 請求角色列表方法

* 實現Account client 建立角色 和 回應角色方法

7.png

參考 官網 KBEngine簡單RPG-Demo源碼解析

https://github.com/daaoling/KBEngine-LearnNote.git


免責聲明!

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



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