Unity之Bmob云存储一
无论我们做软件还是做游戏,少不了的就是和数据打交道,对于要保存到本地的数据,我们可以采用的载体太多了。例如:txt,Xml,Sqlite,SqlServer,Mysql等等,具体使用什么那就视情况而定了。但是假如我们要在游戏中要做一个在线排行榜,我们会怎么解决呢?有些人立刻会想到把数据放到服务器上不就OK了!对的,我也是这么想的!实践才是检验真理的唯一标准!废话不多说,就是干!
1,首先介绍下Bmob云。
Bmob可以开发一个云存储的移动应用软件,给应用软件快速添加一个安全灵活的后台管理系统,方便浏览终端保存的各种信息。对于很多Android/ios/wp个人移动开发者来说,开发一个具有网络功能的应用不是一件容易的事,不仅需要购买/租赁服务器,还必须掌握一门诸如Java/.net/php这类的服务器开发语言,还需要考虑服务器端的构建,这一切对于移动开发者来说,都是一个冗长的噩梦。但是在Bmob平台上,您只需注册一个帐号,成功后申请创建任意多个数据库,获得对应的Key,下载对应版本的SDK并将其嵌入到移动应用中,便可以调用存取API,进行数据的任意操作。有了Bmob,您在3分钟内就可以学会如何开发一个云存储的移动应用软件,给应用软件快速添加一个安全灵活的后台管理系统,方便您浏览终端保存的各种信息。不信的话可以尝试下!几乎查不到太多示例工程,自己摸索了两天,分享下!
先进入官网去看看:http://www.bmob.cn/
1.1我们要做的第一步就是注册用户了,点击注册。
1.2 大家注册好后,直接登录就可以了!
1.3 创建应用并产生AppID号,这个在接下来的Unity 工程中可是个重角色。
1.4 我们先看看Bmob到底可以干嘛!
OK,我们目前关心的已经可以实现了!
2.1 打开Unity 建一个空的工程!
既然使用人家的服务器,肯定少了点什么没有添加到工程里?对了,人家的SDK嘛!添加到工程即可,稍后会共享给大家的!准备工作就绪,可以代码了!
2.2 创建一个简单的脚本 TestBmob1.cs 和MyGameTable.cs
见名知意,测试脚本和数据实体类,我们需要在Bmob服务器上创建我们自定义的表!
接下来添加字段了:playername,score
添加完成,如下:
MyGametable.cs
- using UnityEngine;
- using System.Collections;
- using cn.bmob.io;
- public class MyGameTable : BmobTable
- {
- /// <summary>
- /// Bmob服务器端我们定义的表名
- /// </summary>
- public const string TABLENAME = "MyGameTable";
- /// <summary>
- /// 玩家姓名
- /// </summary>
- public string playerName { get; set; }
- /// <summary>
- /// 玩家得分
- /// </summary>
- public BmobInt score { get; set; }
- /// <summary>
- /// 成员函数
- /// </summary>
- /// <param name="input"></param>
- public override void readFields(BmobInput input)
- {
- base.readFields(input);
- this.score = input.getInt("score");
- this.playerName = input.getString("playerName");
- }
- public override void write(BmobOutput output, bool all)
- {
- base.write(output, all);
- output.Put("score", this.score);
- output.Put("playerName", this.playerName);
- }
- }
TestBmob1.cs
- using UnityEngine;
- using System.Collections;
- using cn.bmob.api;
- using cn.bmob.tools;
- using cn.bmob.io;
- using testBmob;
- public class TestBmob1 : MonoBehaviour
- {
- private BmobUnity Bmob;
- // Use this for initialization
- void Start()
- {
- BmobDebug.Register(print);
- Bmob = gameObject.GetComponent<BmobUnity>();
- }
- void OnGUI()
- {
- if (GUILayout.Button("Insert"))
- {
- InsertData();
- }
- if (GUILayout.Button("GetData"))
- {
- getRecoard();
- }
- if (GUILayout.Button("Update"))
- {
- updateData();
- }
- if (GUILayout.Button("GetAllData"))
- {
- getAllInfo();
- }
- if (GUILayout.Button("删除数据"))
- {
- deleteData();
- }
- }
- #region
- /// <summary>
- /// 插入数据
- /// </summary>
- public void InsertData()
- {
- MyGameTable mg = new MyGameTable();
- mg.score = ;
- mg.playerName = "testBmob";
- Bmob.Create(MyGameTable.TABLENAME, mg, (resp, exception) =>
- {
- if (exception != null)
- {
- Debug.Log("保存失败,原因: " + exception.Message);
- }
- else
- {
- Debug.Log("保存成功" + resp.createdAt);
- }
- });
- }
- /// <summary>
- /// 获取表所以信息
- /// </summary>
- public void getAllInfo()
- {
- Bmob.Delete(MyGameTable.TABLENAME, "4d05c4cd58", (resp, exception) =>
- {
- if (exception != null)
- {
- Debug.Log("删除失败, 失败原因为: " + exception.Message);
- return;
- }
- else
- {
- Debug.Log("删除成功, @" + resp.msg);
- }
- });
- }
- /// <summary>
- /// 查询数据
- /// </summary>
- public void getRecoard()
- {
- MyGameTable mg = new MyGameTable();
- Bmob.Get<MyGameTable>(MyGameTable.TABLENAME, "2TLe999G", (resp, exception) =>
- {
- if (exception != null)
- {
- Debug.Log("查询失败, 失败原因为: " + exception.Message);
- return;
- }
- MyGameTable game = resp;
- Debug.Log(game.playerName + "," + game.score + "," + game.objectId);
- Debug.Log("获取的对象为: " + game.ToString());
- });
- }
- /// <summary>
- /// 更新数据
- /// </summary>
- public void updateData()
- {
- MyGameTable game = new MyGameTable();
- game.playerName = "wuzhang";
- Bmob.Update(MyGameTable.TABLENAME, "4d05c4cd58", game, (resp, exception) =>
- {
- if (exception != null)
- {
- Debug.Log("保存失败, 失败原因为: " + exception.Message);
- return;
- }
- Debug.Log("保存成功, @" + resp.updatedAt);
- });
- }
- /// <summary>
- /// 删除数据
- /// </summary>
- public void deleteData()
- {
- Bmob.Delete(MyGameTable.TABLENAME, "4d05c4cd58", (resp, exception) =>
- {
- if (exception != null)
- {
- Debug.Log("删除失败, 失败原因为: " + exception.Message);
- return;
- }
- else
- {
- Debug.Log("删除成功, @" + resp.msg);
- }
- });
- }
- #endregion
- }
2.3 将脚本挂载到MainCamera上运行下看看:
显示插入数据成功了,还是不放心,看看后台数据库吧?
插入数据OK了吧?其它增删查改就简单了!
查询一下吧!
更新下数据playername改成楼主名字:wuzhang
删除数据
好了,今天就学习到这里吧!大家可以先了解下Bmob也可以去官网上看看你API!
下次学点更有意思的:上传文件,读取文件,下载图片,邮箱验证功能等!
PS:重要的一点忘说了,AppID。
就用在这里,我们所有的操作都是基于AppID的,相当于是对你创建应用的唯一标识!
工程源码链接:https://github.com/wuzhangwuzhang/Bmob
Unity之Bmob云存储一的更多相关文章
- openstack-swift云存储部署(二)
接上篇,swift-proxy和swift-store的安装 先说一下服务器分配 swift-proxy和keystone部署在192.168.25.11 swift-store是两台 分别是192 ...
- openstack-swift云存储部署(一)
最近因为工作的需要搭建了一套swift云存储架构 我们先来解读一下里面的技术知识点:swift服务是属于openstack中的一种组件服务,openstack中的组件服务还有keystone.Nova ...
- phpcmsv9 阿里云OSS云存储整合教程
该教程算不上是phpcmsv9阿里云oss插件,所以整个修改及其代码覆盖前请一定记得备份.还有一点就是后台发布文章时上传的附件还是会保存在你的服务器上,基于以下原因:1.个人的需求是前台页面需要使用t ...
- Microsoft Azure 云存储服务概念
本文包括了以下几点内容: 什么是Azure云存储服务? 云存储服务分类 云存储服务的优势 什么是Azure云存储服务? Azure 云存储服务可以说是Azure 上最重要的SAAS服务了. 在Azur ...
- 自己搭建云存储(WIFI路由器上接硬盘)
欢迎转载opendevkit文章, 文章原始地址: http://www.opendevkit.com/?e=49 http://www.cnet.com/how-to/share-an-extern ...
- java servlet手机app访问接口(三)高德地图云存储及检索
这篇关于高德地图的随笔内容会多一点, 一.业务说明 对应APP业务中的成员有两类,一是服务人员,二是被服务人员, 主要实现功能, 对APP中的服务人员位置进行时时定位, 然后通过被服务人员登 ...
- ios每日一发--Leanclude数据云存储以及登录 注册账户
利用LeanCloud来实现注册账号,存储账号以及,登录时查询账号是否正确.集成方式很简单可以看这里的官方文档.地址是这里: https://leancloud.cn/docs/ 在这里创建应用,以及 ...
- 云存储性能测试工具--COSBench安装
COSBench安装 Cosbench是Intel的开源云存储性能测试软件,COSBench目前已经广泛使用与云存储测试,并作为云存储的基准测试工具使用 1 环境 1.1 操作系统 COSBench可 ...
- 自动备份SQL数据库到云存储Storage
如何自动备份SQL数据库到Storage呢. 前提条件需要SQL Server2012 SP1 CU2或更高版本 1. 备份SQL Azure数据库到云存储Storage 1)在SQL Server ...
随机推荐
- Eclipse下绿色安装插件Aptana、Swing
本文主要针对Ecplise下绿色安装插件,写本篇博客也是因为笔者在Ecplise下安装Aptana时不断安装出现错误,所以写下自己安装成功以及之前出错的原因,也搜集了许多资料在此一并总结一下吧! Ec ...
- C#语法糖: 扩展方法(常用)
今天继续分享C#4.0语法糖的扩展方法,这个方法也是我本人比较喜欢的方法.大家先想想比如我们以前写的原始类型不能满足现在的需求,而需要在该类型中添加新的方法来实现时大家会怎么做.我先说一下我没有学习到 ...
- C# byte[]与char[]、string与char[]、byte[] 与 string 互转
1. byte array -> char array Byte[] b=new byte[5]{0x01,0x02,0x03,0x04,0x05}; Char[] c=Encoding.AS ...
- viewstate加密(转)
ViewState在客户端展开的时候,默认是Auto,不加密的,如果页面有限制性的表单控件才加密,所以,可以查看,代码如下: byte[] bytes = Convert.FromBase64Stri ...
- 网页搜索功能 多表搜索sql
SELECT ID, Title, FromTableFROM (SELECT ID, ArticleName AS Title, 'Article' AS FromTable FROM ...
- cxf的使用及安全校验-01创建简单的服务端接口
最近因为项目的需要,研究了一下webservice的使用: 这里以cxf2.7.0为例,大致介绍一下,也用于备份啦(张立胜) 大致介绍一下项目的情况:项目有maven管理,webservice调用的方 ...
- angularjs字符串插值($interpolate)
<!DOCTYPE html> <html lang="zh-CN" ng-app="app"> <head> <me ...
- 记一道css面试题 : 三栏布局两边宽度固定,中间宽度自适应,并且布局随屏幕大小改变。
前几天面试时有道css题没做出来,回来好好学习一番后把其记录下来. 题目是这样的:左中右三栏布局,左右两栏宽度固定,左右两栏的宽度为200像素,中间栏宽度自适应.当屏幕小于600px时,3栏会分别占用 ...
- Android广播机制(转)
1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器).广播作为Android组件间的通 ...
- 开心系列学习笔记---------javascript(7)
一.函数 1)函数类型 函数声明(缩写为FD)是这样一种函数: 1.有一个特定的名称 2.在源码中的位置:要么处于程序级 ...