Table of Contents

4.主要 API 說明(Core API Reference)

這一部分對應 SDK 內的函式與主要 API 功能,這邊介紹的 SDK 皆指 CHTLandProxy 底下的所有 API 功能。

4-1 連線相關 API

連線狀態與房間控制: IMultiConnectManager
連線事件監聽與呼叫: IMultiActManager

(1)如果要取得連線狀態相關功能,請實作 IMultiConnectCallback 介面,並在需要監聽前進行註冊事件的呼叫。

IMultiConnectManager 範例代碼
public class ServerData : MonoBehaviour,IMultiConnectCallback
{
    // 在要監聽前的階段先進行註冊
    void OnEnable()
    {
        CHTLandProxy.multiConnectManager.RegisterCallback(this);
    }

    // 實作介面的事件,當有觸發時會自動走進這邊
    public void OnConnectStateChanged(ConnectState connectState)
    {
        if (connectState == ConnectState.Connected)
        {
            // 已完成連線 toDo...

        }else if (connectState == ConnectState.Connecting)
        {
            // 連線中 toDo...

        }else if(connectState == ConnectState.Disconnected )
        {
            // 斷線 toDo...
        }
    }

    // 當房間人數變動時,這邊會通知
    public void OnPlayersChange(int count)
    {
        // toDo...
    }

    // 如果房間滿時,判斷加入別的房間去
    public void ReTryJoinRoom()
    {
        CHTLandProxy.multiConnectManager.Connect(ConnectType.RandomJoin);
    }

    // 控制角色返回大廳
    public void BackToLobby()
    {
        CHTLandProxy.multiConnectManager.DisConnect();
    }

    // 檢查是不是 Master 身分
    public bool GetIsMaster()
    {
        return CHTLandProxy.multiConnectManager.CheckIsMaster();
    }
}

(2) 如果要監聽與推播同步資訊相關功能,請實作 IMultiActManager 介面,並在需要同步事件前進行註冊完畢。

IMultiActManager 範例代碼
public class ServerData : MonoBehaviour,IMultiActManager
{
    // 請確保 IMultiActManager 註冊事件執行在 IMultiConnectManager 註冊後
    // 且已完成 Avatar 角色的生成
    // 註冊過後,才能接收到 int / float / string / RPC 的事件推播
    void RegisterCallback()
    {
        CHTLandProxy.multiActManager.RegisterCallback(this);
    }

    // 監聽 int 數值變化 (數值與前次不同才會通知)
    void OnIntegerChanged(int index, int value)
    {}

    // 監聽 string 字串變化 (字串與前次不同才會通知)
    void OnStringChanged(int index, string value)
    {}

    // 監聽 float 數值變化 (數值與前次不同才會通知)
    void OnFloatChanged(int index, float value)
    {}

    // 監聽 RPC 事件通知 
    void OnRPC_Called(int ivalue, string svalue)
    {}

    // 發送 int 事件的數值
    public void Call_ChangInt(IntAction index, int value)
    {
        CHTLandProxy.multiActManager.ChangeInteger((int)index, value);
    }

    // 發送 RPC 事件推播
    public void Call_ChangeRPC(RPCAction ivalue, string svalue)
    {
        CHTLandProxy.multiActManager.RequestAuthority();
        CHTLandProxy.multiActManager.CallRPC((int)ivalue, svalue);
    }

    // Master 設定同步物件 最多3個 (可進行 position / rotation 同步)
    public void BindGameObject(int index, GameObject go)
    {
        CHTLandProxy.multiActManager.BindGameObject(index, go);
    }

    // 非 Master 人員取得同步物件
    public GameObject GetBindGameObject(int index)
    {
        return CHTLandProxy.multiActManager.GetGameObject(index);
    }
}

4-2 鏡頭控制相關 API

控制鏡頭本身事件: ICameraManager
控制鏡頭追隨事件: IInputManager

鏡頭調整 範例代碼
// 晃動鏡頭 參數可自己調整
public void ShakeCamera()
{
    CHTLandProxy.cameraManager.Shake(0.2f, 5f);
}

// 控制鏡頭追隨 Avatar 的距離遠近
public void SetCamera(float distance)
{
    CHTLandProxy.cameraManager.SetZoomDistance(distance);
}

// 切換鏡頭追隨其他人
public void ChangeCamera(GameObject go)
{
    CHTLandProxy.InputManager.CameraChangeTarget(go);
}

// 切換鏡頭追隨自己的 Avatar
public void SetSelfCameraBack()
{
    CHTLandProxy.InputManager.CameraChangeBack();
}

4-3 UI項目控制相關 API

UI 介面功能控制: IGUIManager

UI 項目控制 範例代碼
// 開關 Joystick 預設 Web 是關閉的
public void SetJoystickButtonState(bool state)
{
#if !UNITY_WEBGL
    CHTLandProxy.guiManager.OpenJoystickButton(state);
#endif
}

4-4 成就任務控制相關 API

成就任務完成通知: IMissionManager

成就任務完成通知 範例代碼
// scene_id : 從創作者網站各自場景管理頁面內可取得 ID 資料
// mission_id : 從創作者網站建立成就任務後,可取得每階段的 mission ID
// 通知伺服器端後,伺服器端會判斷是否該使用者已得過此成就,如果尚未取得此成就則會通知使用者完成此階段
// 此任務事件在 Test 環境下,開發者每次都會觸發,但不會獲得對應獎勵
// 在 Publish 環境下,只有尚未完成成就時,才會觸發
public void SetMission(string scene_id, string mission_id)
{
    CHTLandProxy.missionManager.SetMissionDone(scene_id, mission_id);
}

4-5 使用者個人資料相關 API

取得使用者個人資料: IUserManager

使用者個人資料取得 範例代碼
// 取得角色暱稱
public string GetUserNickName()
{
    return CHTLandProxy.userManager.GetNickname();
}

4-6 Player 與 Avatar 同步相關 API

Player 與 Avatar 資料顯示、控制、管理: IPlayerManager

(1) Player 相關功能 範例代碼
// 控制角色是否可以移動
public void SetAvatarFrozen(bool state)
{
    CHTLandProxy.playerManager.GetLocalPlayer().SetAvatarFrozen(state);
}

// 設定角色移動到某個位置
public void SetAvatarPosition(Vector3 v3)
{
    CHTLandProxy.playerManager.GetLocalPlayer().SetAvatarPosition(v3);
}

// 是否要顯示角色姓名在各自 Avatar 頭上
public void SetBandState(bool state)
{
    CHTLandProxy.playerManager.GetLocalPlayer().SetBandShow(state);
}

// Player 本身帶血量 預設 0
public void SetHp(int hp)
{
    CHTLandProxy.playerManager.GetLocalPlayer().SetHP(hp);
}

// 取得自己 Player 血量
public int GetHp()
{
    return CHTLandProxy.playerManager.GetLocalPlayer().GetHP();
}

// 設定角色身份類型
public void SetPlayerType(string type)
{
    CHTLandProxy.playerManager.GetLocalPlayer().SetPlayerType(type);
}

// 更改角色走路與跑步的移動速度
public void SetSpeed(float walk, float run)
{
    CHTLandProxy.playerManager.GetLocalPlayer().SetWalkSpeed(walk);
    CHTLandProxy.playerManager.GetLocalPlayer().SetRunSpeed(run);
}

// 控制角色 Collider 狀態
public void SetAvatarCollider(bool state) 
{
    CHTLandProxy.playerManager.GetLocalPlayer().SetUseCollider(state);
}

// 獲取本身 Avatar 物件
public GameObject GetAvatarObject()
{
    return CHTLandProxy.playerManager.GetLocalPlayer().
}   

//取得自己的 User ID
public string GetSelfUserID()
{
   return CHTLandProxy.playerManager.GetLocalPlayer().GetUserId();
}

// 取得房間所有人的 Avatar 資訊
public List<PlayerInfo> GetPlayersList()
{
    return CHTLandProxy.playerManager.GetLocalPlayer().GetPlayers();
}

(2) Avatar 更換 Skin 、掛載物件 與 恢復 範例代碼
// 把自己的Avatar換回原本的Skin
public void ResetAvatarSkin()
{
    CHTLandProxy.playerManager.GetLocalPlayer().GetAvatar().ResetAvatar();
}

// goName : 為變更要穿戴的 Skin 物件名稱 ( Skin 請確認有放在場上,且不要跟其他物件重複名稱)
// gender : 可以變更性別 (影響到預設的動畫行為)
public void ChangeAvatarSkin(string goName, Gender gender)
{
    CHTLandProxy.playerManager.GetLocalPlayer().GetAvatar().ReplaceAvatar(goName, gender);
}

// 移除身體某部位所放置的物件
public void RemoveAttachment(string goName,HumanBodyBones boneToAttach)
{
    CHTLandProxy.playerManager.GetLocalPlayer().GetAvatar().RemoveAttachment(goName, boneToAttach);
}

// 將額外物件掛載在身體某部位,並可以進行位置、角度跟尺寸的調整
public void AddAttachment(string goName,HumanBodyBones boneToAttach, Vector3 position, Quaternion rotation, Vector3 scale)
{
    CHTLandProxy.playerManager.GetLocalPlayer().GetAvatar().AddAttachment(goName,
    boneToAttach,
    position,
    rotation,
    scale
    );
}
(3) Avatar 變更動作 範例代碼
// 播放一次自定義動作
public void Play_Ani(string animationName)
{
    CHTLandProxy.playerManager.GetLocalPlayer().GetAvatar().PlayAnimationClip(animationName, true); 
}

// 停止播放動作 恢復預設Idle狀態
public void Stop_Ani()
{
    CHTLandProxy.playerManager.GetLocalPlayer().GetAvatar().StopAnimationClip();
}