ARcore项目 MatchVS联网实现部分教程

目录

    • 目录介绍
    • 运行说明
      • 非常重要的事!!
  • 代码介绍
    • tea_logincontroller脚本
    • tea_response脚本
    • tea_addTag脚本

目录介绍

       需要导入的为以下三部分:
       Script 下 Tea 文件夹下为项目部分脚本代码与预制体ARcore项目 MatchVS联网实现部分教程_第1张图片

运行说明

首先需要配置 Player Settings 中的 Api Conmpatibility LevelARcore项目 MatchVS联网实现部分教程_第2张图片
       接着,Scene中 loginscene 与 mainscene 需要加入到 Build Settings 中的 Scenes 中。若要直接运行,需要将 loginscene 设置为初始场景,即后面标号为0。如图:
ARcore项目 MatchVS联网实现部分教程_第3张图片
       若要加到项目中以后引用,则调用 SceneManger.LoadScene(“loginscene”);

非常重要的事!!

目前版本,在 Unity 运行 MatchVS 联网时,每次运行结束再次运行时都会崩溃,需要重新启动 Unity,且运行前的部分全局设置会被还原。所以保险的方法是更改完全局设置后,直接保存并退出,重新打开 Unity。这个可能是由于内存未释放等原因造成的。后续版本进行改进。

代码介绍

       下面介绍几个较为重要的脚本。

tea_logincontroller脚本

       这个脚本挂载在 loginscene 的 controller 空物体下,里面配置了联网的 appkey、secret 等。有登录、创建房间等函数。它里面生成了一个静态类 tea_response。
在这里插入图片描述

tea_response脚本

       这个类在 loginscene 刚开始时就被创建,负责网络信息的回调。可参考官方文档。由于里面回调方法在调用正常方法时会出现问题,所以要么使用静态变量,如:ARcore项目 MatchVS联网实现部分教程_第4张图片
要么参考我的上一篇博客。

tea_addTag脚本

ARcore项目 MatchVS联网实现部分教程_第5张图片       这个脚本控制点击实现物体之后的 Tag 或 Text 生成。注意要在每个需要生成相应动作的物体下都挂载此脚本,且添加合适的 Collider 组件。
       为实现每个物体下只有一个 Text 或 Tag,利用下面代码实现:

public void createTag()
    {
        Debug.Log("createTag");
        int childCount = this.transform.childCount;
        for (int i = childCount-1; i >=0 ; i--)	//从后向前遍历子物体
        {
            if(this.transform.GetChild(i).name.Contains("Tag")) //防止删除其他子物体
            {
                Debug.Log("Destory");
                Destroy(this.transform.GetChild(i).gameObject);
            }
        }
        Vector3 pos = new Vector3(1, 1, 1);		//偏移量
        Instantiate(Tag, this.transform.position + pos, this.transform.rotation, this.transform);		//实例化方法
    }

       为防止网络震荡导致不断重复产生物体,添加下面代码:

	public void createTagEvent()
    {
        Debug.Log("createTagEvent");
        JsonData data = new JsonData();
        data["action"] = "addtag";
        data["name"] = this.name;
        data["text"] = "test";
        string value = data.ToJson();
        GameManager.SendEvent(value, new int[] { GameManager.userID });
        listview.SetActive(false);
        createTag();
    }

       当本机发生点击事件时,调用 createTagEvent() 方法,可以给所有客户发送信息;当其他客户传递来点击事件时,调用 createTag() 方法。
同时为防止自己发送的信号再被自己重新接受处理,在 tea_getEvent 脚本中 getInfo 方法下有判断逻辑:

	public void getInfo(MsMsgNotify tRsp1)
    {
        Debug.Log(tRsp1.srcUserID);
        Debug.Log(GameManager.userID);
        if (tRsp1.srcUserID != GameManager.userID)
        {
            tRsp = tRsp1;
            Debug.Log("getInfo");
            flag = true;
        }
        else
            Debug.Log("getMyInfo");
        
    }

你可能感兴趣的:(ARCore,unity,网络)