unity教程:如何实现分数排行榜
发表于2017-03-24
一般游戏结束以后都可以看到有一个分数排行榜的界面,那么这个功能是如何开发出来的呢,下面就给大家介绍下在unity实现分数排行榜的方法。
要想做分数排行榜,还需要使用到这些工具:
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 脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | 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); } } string , string > string ,> string , string > |
开始后输入名字及分数后按下 Update 按钮
若成功则会在 Console 面板看到刚刚在 php 裡的提示
在 http://localhost/phpmyadmin 可查询是否正确写入资料
排行榜下載
在 NetBeans 中建立 RankingDownload.php 脚本
回到 Unity 更新 UI.cs 腳本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | 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); } } string , string > string ,> string , string > string , string > string ,> string , string > |
接下来在游戏中按下 Download 按钮
就可以接收到由资料库所传回的讯息
由于这裡回传的资料没有另外经过处理
所以格式看起来不是很好
不过还是可以看到回传的顺序为
TED,1003
TED,1000
这样建立排行榜的概念就算完成了