Unity如何实现分数排行榜功能(Web数据库)
发表于2018-06-04
对于排行榜的实现方法有多种,不过本篇和要分享的是从Web数据库中实现分数排行榜功能,这样玩家就能第一时间了解最近排行数据。
XAMPP:建立排行榜所需资料库
NetBeans:撰写 PHP 表单部分
Unity:撰写客户端发送请求
教学中所使用的 Username 为 root
是 MySQL 中预设的使用者帐号,也是权限最高的帐号,因为撰写教学所以在这里直接使用 root,建议实际撰写时使用另外建立的使用者帐号,防止被骇客攻击。
先使用 MySQL 建立资料库及资料表
mysql -u root
create database highscore;
use highscore;
create table ranking (
id int(10) auto_increment primary key,
name varchar(15),
score int(10)
);
资料库及资料表建立完成后可至 http://localhost/phpmyadmin 查看资料表是否建立成功
分数上传
接下来开启 NetBeans 撰写分数上传部分
建立一个新专案并命名为 Unity
新增一个 RankingUpdate.php 脚本
回到 Unity 建立 UI.cs 脚本
using UnityEngine; using System.Collections; using System.Collections.Generic; public class UI : MonoBehaviour { public string path = "http://localhost/Unity/RandingUpdate.php"; public string downloadPath = "http://localhost/Unity/RankingDownload.php"; public string name; public string score; void OnGUI() { name = GUILayout.TextField(name, 10); score = GUILayout.TextField(score, 10); if(GUILayout.Button("Update")) { StartCoroutine("ScoreUpdate"); } } public IEnumerator ScoreUpdate() { WWWForm form = new WWWForm(); Dictionary<string,string> data = new Dictionary<string, string>(); data.Add("name", name); data.Add("score", score); foreach(KeyValuePair<string,string> post in data) { form.AddField( post.Key, post.Value ); } WWW www = new WWW(path, form); yield return www; Debug.Log(www.text); } }
开始后输入名字及分数后按下 Update 按钮,若成功则会在 Console 面板
看到刚刚在 php 里的提示,在 http://localhost/phpmyadmin 可查询是否正确写入资料。
排行榜下载
在 NetBeans 中建立 RankingDownload.php 脚本
回到 Unity 更新 UI.cs 脚本
using UnityEngine; using System.Collections; using System.Collections.Generic; public class UI : MonoBehaviour { public string path = "http://localhost/Unity/RandingUpdate.php"; public string downloadPath = "http://localhost/Unity/RankingDownload.php"; public string name; public string score; void OnGUI() { name = GUILayout.TextField(name, 10); score = GUILayout.TextField(score, 10); if(GUILayout.Button("Update")) { StartCoroutine("ScoreUpdate"); } if(GUILayout.Button("Download")) { StartCoroutine("ScoreDownload"); } } public IEnumerator ScoreUpdate() { WWWForm form = new WWWForm(); Dictionary<string,string> data = new Dictionary<string, string>(); data.Add("name", name); data.Add("score", score); foreach(KeyValuePair<string,string> post in data) { form.AddField( post.Key, post.Value ); } WWW www = new WWW(path, form); yield return www; Debug.Log(www.text); } public IEnumerator ScoreDownload() { WWWForm form = new WWWForm(); Dictionary<string,string> data = new Dictionary<string, string>(); data.Add("download", "1"); foreach(KeyValuePair<string,string> post in data) { form.AddField( post.Key, post.Value ); } WWW www = new WWW(downloadPath, form); yield return www; Debug.Log(www.text); } }
接下来在游戏中按下 Download 按钮,就可以接收到由资料库所传回的讯息。
由于这里回传的资料没有另外经过处理,所以格式看起来不是很好。
不过还是可以看到回传的顺序为
TED,1003
TED,1000
这样建立排行榜的概念就算完成了。