目录介绍
需要导入的为以下三部分:
Script 下 Tea 文件夹下为项目部分脚本代码与预制体
运行说明
首先需要配置 Player Settings 中的 Api Conmpatibility Level
接着,Scene中 loginscene 与 mainscene 需要加入到 Build Settings 中的 Scenes 中。若要直接运行,需要将 loginscene 设置为初始场景,即后面标号为0。如图:
若要加到项目中以后引用,则调用 SceneManger.LoadScene(“loginscene”);
非常重要的事!!
目前版本,在 Unity 运行 MatchVS 联网时,每次运行结束再次运行时都会崩溃,需要重新启动 Unity,且运行前的部分全局设置会被还原。所以保险的方法是更改完全局设置后,直接保存并退出,重新打开 Unity。这个可能是由于内存未释放等原因造成的。后续版本进行改进。
代码介绍
下面介绍几个较为重要的脚本。
tea_logincontroller脚本
这个脚本挂载在 loginscene 的 controller 空物体下,里面配置了联网的 appkey、secret 等。有登录、创建房间等函数。它里面生成了一个静态类 tea_response。
tea_response脚本
这个类在 loginscene 刚开始时就被创建,负责网络信息的回调。可参考官方文档。由于里面回调方法在调用正常方法时会出现问题,所以要么使用静态变量,如:
要么参考我的上一篇博客。
tea_addTag脚本
这个脚本控制点击实现物体之后的 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");
}