|
作者:夜雨
首先介绍一下自己,我是做php网站开发的,会javascript,但是没有接触过unity3d,8月9号我们团队队长让我看看关于unity3D基本使用和连接数据的资料然后,我经过调试在本地服务器运行成功。所以,以下内容应该会很速成,希望对u3d使用者有帮助。
step1.在phpmyadmin里建立名为“unity3dtest”的数据库
step2.建数据表- CREATE TABLE `unity3dTest`.`scores` (
- `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
- `name` VARCHAR( 30 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL ,
- `password` VARCHAR( 50 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL ,
- `info` VARCHAR( 500 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL
- ) ENGINE = MYISAM
复制代码 step3.插入数据- INSERT INTO `unity3dTest`.`scores` (
- `id` ,
- `name` ,
- `password` ,
- `info`
- )
- VALUES (
- NULL , 'admin', 'admin', 'It is my first unity3d game!'
- );
复制代码 step4.php控制程序。以下程序可以放在你本地服务器的根目录下,我在我的电脑上为了更合理建立了一个专门的文件夹放置该文件。
在本地服务器下创建“Unity3dApp”文件夹,并创建“check.php”文件,将下面的代码复制到php文件中 - <?
- // 连接数据库
- $host = "localhost"; //主机名
- $user = "root"; //用户名
- $password = ""; //密码
- $dbname = "unity3dTest"; //数据库名称
- mysql_connect($host, $user, $password) or die("Cant connect into database");//连接失败输出错误提示
- mysql_select_db($dbname)or die("Cant connect into database");
- // =============================================================================
- // PROTECT AGAINST SQL INJECTION and CONVERT PASSWORD INTO MD5 formats
- //此处在某些教程中是反注入函数,我在自己做程序时删掉了,因为没太大的必要。
- //如果你想加反注入函数可以参考
- //不过我看到的部分php程序逻辑有问题,大家应根据自己需要修改
- // =============================================================================
- $unityHash =$_POST["hash"];//接收unity3d发送给程序的哈希值
- $phpHash = "hashcode"; //另外,要说的是hash值在此其实相当于二重保险,避免sql注入
- //所以为了简化程序我这里也去了,只要保证unity3d和php内的哈希值相等即可
- $nick = $_POST["name"]; //接收unity3d发送给程序的用户名
- $pass = $_POST["password"];//接收unity3d发送给程序的密码
- //先判断发送值是否为空
- if(!$nick || !$pass)
- {
- echo "昵称或密码不能为空!";//昵称或密码不能为空。
- }
- else {
- if ($unityHash != $phpHash)
- {
- echo "HASH code is diferent from your game, you infidel.";//判断哈希值是否相等
- }
- else
- {
- $SQL = "SELECT * FROM `scores` WHERE `scores`.name = '" . $nick . "' and `scores`.password = '".$pass."'";//查看用户是否存在
- //应注意检查登录的过程其实就是查找数据表数据的过程,一条查询语句就可实现
- //echo $SQL;检测sql语句是否正确
-
-
- $result = mysql_query($SQL) or die("DATABASE ERROR!");
-
- if(mysql_num_rows($result)==0)//php函数
- {
- echo "昵称或密码错误!"; //输出昵称或密码错误
-
- }
- else
- {
- echo "Welcome to unity3D !\n";//成功提示,“\n”只是为了能在unity中实现换行
- $sql = "SELECT * FROM `scores` WHERE `scores`.name = '" . $nick . "' and `scores`.password = '".$pass."'";
- $result = mysql_query($sql);
-
- while($row = mysql_fetch_array($result))//输出用户表信息
- {
- echo "ID:".$row['id']."\n";
- echo "NAME:".$row['name']."\n " ;
- echo "PASSWORD:".$row['password']."\n ";
- echo "INFO:".$row['info']."\n ";
-
- }
- }
-
- }
- }
- // Close mySQL Connection
- mysql_close();
- ?>
复制代码 step5.创建javascript文件,并命名为“phpUnity”,将其拖到hierarchy中主摄像头的对象上- #pragma strict
- private var formName = "";//创建私有变量formName,记录文本框内输出的用户名变量
- private var formPassword = "";//创建私有变量 formPassword ,记录文本框内输出的密码变量
- var formText = "";//创建变量 formText ,显示php发送给web端的信息
- var URL = "输入你的网址";//提交表单的网址
- var hash = "hashcode";//与php中相同的哈希值
- private var textrect = Rect (10, 150, 500, 100); //建立GUI的文本输入框
-
- function OnGUI()
- {
- GUI.Label( Rect (10, 10, 80, 20), "姓名:"); //用户名
- GUI.Label ( Rect (10, 30, 80, 20), "密码:" );//密码
- formName = GUI.TextField ( Rect (90, 10, 100, 20), formName ); //这里,你可将你输入的用户名赋值给formName变量
- formPassword = GUI.PasswordField ( Rect (90, 30, 100, 20), formPassword ,"*"[0], 25);
- //同理,这里是给formPassword 赋值
- if ( GUI.Button ( Rect (10, 60, 100, 20) , "登录" ) )
- { //如果单击登录按钮会执行Login()函数
- Login();
- }
- GUI.TextArea( textrect, formText );//显示文本信息
- }
-
- function Login()
- {
- var form = new WWWForm();//建立新表单变量
- print(hash);//print的内容会在console选项卡中输出
- print(formName);//我在这里添加三个输出语句是为了检验用户名和密码是否复制正确,以便之后调试php文件
- print(formPassword);
-
- form.AddField("hash",hash);//创建表单各项
- form.AddField("name",formName);
- form.AddField("password",formPassword);
- var w = WWW(URL,form);//建立名为“w”的变量,并且将表单提交的URL和表单内容同步
- yield w;//我们等待表单响应php程序的返回,让程序把控制权交给其他应用
- if(w.error != null)//如果返回信息为错误信息,在console中输出错误信息
- {
- print(w.error);
- }
- else
- {
- print("OK!");//在console中输出ok
- formText = w.text;//将返回的web短信息赋值给formText ,在 执行GUI.TextArea( textrect, formText );时输出
- }
- formName = "";//点击查询完用户信息后清空用户名及密码
- formPassword = "";
- }
复制代码 登录测试结果:
描述:测试结果
图片:QQ截图20120811094446.png
另外,你还可以插入其他信息依然可以查询
PS:因为我是刚接触unity中javascript的封装函数,js文件中有些注释可能不准,欢迎批评指正~谢谢~
|
|