【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 2604|回复: 0

[转]分享简易unity3D通过javascript和php连接mysql数据库的代码,简易速成!

[复制链接]
发表于 2013-5-9 17:16:05 | 显示全部楼层 |阅读模式
作者:夜雨
首先介绍一下自己,我是做php网站开发的,会javascript,但是没有接触过unity3d,8月9号我们团队队长让我看看关于unity3D基本使用和连接数据的资料然后,我经过调试在本地服务器运行成功。所以,以下内容应该会很速成,希望对u3d使用者有帮助。

step1.在phpmyadmin里建立名为“unity3dtest”的数据库
step2.建数据表
  1. CREATE TABLE  `unity3dTest`.`scores` (
  2. `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  3. `name` VARCHAR( 30 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL ,
  4. `password` VARCHAR( 50 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL ,
  5. `info` VARCHAR( 500 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL
  6. ) ENGINE = MYISAM
复制代码
step3.插入数据
  1. INSERT INTO  `unity3dTest`.`scores` (
  2. `id` ,
  3. `name` ,
  4. `password` ,
  5. `info`
  6. )
  7. VALUES (
  8. NULL ,  'admin',  'admin', 'It is my first unity3d game!'
  9. );
复制代码
step4.php控制程序。以下程序可以放在你本地服务器的根目录下,我在我的电脑上为了更合理建立了一个专门的文件夹放置该文件。
在本地服务器下创建“Unity3dApp”文件夹,并创建“check.php”文件,将下面的代码复制到php文件中
  1. <?
  2. // 连接数据库
  3. $host = "localhost"; //主机名
  4. $user = "root"; //用户名
  5. $password = ""; //密码
  6. $dbname = "unity3dTest"; //数据库名称
  7. mysql_connect($host, $user, $password) or die("Cant connect into database");//连接失败输出错误提示
  8. mysql_select_db($dbname)or die("Cant connect into database");
  9. // =============================================================================
  10. // PROTECT AGAINST SQL INJECTION and CONVERT PASSWORD INTO MD5 formats
  11. //此处在某些教程中是反注入函数,我在自己做程序时删掉了,因为没太大的必要。
  12. //如果你想加反注入函数可以参考
  13. //不过我看到的部分php程序逻辑有问题,大家应根据自己需要修改
  14. // =============================================================================
  15. $unityHash =$_POST["hash"];//接收unity3d发送给程序的哈希值
  16. $phpHash = "hashcode"; //另外,要说的是hash值在此其实相当于二重保险,避免sql注入
  17. //所以为了简化程序我这里也去了,只要保证unity3d和php内的哈希值相等即可
  18. $nick = $_POST["name"]; //接收unity3d发送给程序的用户名
  19. $pass = $_POST["password"];//接收unity3d发送给程序的密码
  20. //先判断发送值是否为空
  21. if(!$nick || !$pass)
  22. {
  23.     echo "昵称或密码不能为空!";//昵称或密码不能为空。
  24. }
  25. else {
  26.     if ($unityHash != $phpHash)
  27.     {
  28.         echo "HASH code is diferent from your game, you infidel.";//判断哈希值是否相等
  29.     }
  30.     else
  31.     {
  32.         $SQL = "SELECT * FROM `scores` WHERE `scores`.name = '" . $nick . "' and `scores`.password = '".$pass."'";//查看用户是否存在
  33. //应注意检查登录的过程其实就是查找数据表数据的过程,一条查询语句就可实现
  34.         //echo $SQL;检测sql语句是否正确


  35.         $result = mysql_query($SQL) or die("DATABASE ERROR!");
  36.         
  37.         if(mysql_num_rows($result)==0)//php函数
  38.         {
  39.             echo "昵称或密码错误!"; //输出昵称或密码错误
  40.         
  41.         }
  42.         else
  43.         {
  44.             echo "Welcome to unity3D !\n";//成功提示,“\n”只是为了能在unity中实现换行
  45.             $sql = "SELECT * FROM `scores` WHERE `scores`.name = '" . $nick . "' and `scores`.password = '".$pass."'";
  46.             $result = mysql_query($sql);
  47.             
  48.             while($row = mysql_fetch_array($result))//输出用户表信息
  49.             {
  50.             echo "ID:".$row['id']."\n";
  51.             echo "NAME:".$row['name']."\n " ;
  52.             echo "PASSWORD:".$row['password']."\n ";
  53.             echo "INFO:".$row['info']."\n ";        
  54.   
  55.             }
  56.         }
  57.         
  58.     }
  59. }
  60. // Close mySQL Connection
  61. mysql_close();
  62. ?>
复制代码
step5.创建javascript文件,并命名为“phpUnity”,将其拖到hierarchy中主摄像头的对象上
  1. #pragma strict
  2. private var formName = "";//创建私有变量formName,记录文本框内输出的用户名变量
  3. private var formPassword = "";//创建私有变量 formPassword  ,记录文本框内输出的密码变量
  4. var formText = "";//创建变量  formText  ,显示php发送给web端的信息
  5. var URL = "输入你的网址";//提交表单的网址
  6. var hash = "hashcode";//与php中相同的哈希值
  7. private var textrect = Rect (10, 150, 500, 100); //建立GUI的文本输入框

  8. function OnGUI()
  9. {
  10.     GUI.Label( Rect (10, 10, 80, 20), "姓名:"); //用户名
  11.     GUI.Label ( Rect (10, 30, 80, 20), "密码:" );//密码
  12.     formName = GUI.TextField ( Rect (90, 10, 100, 20), formName ); //这里,你可将你输入的用户名赋值给formName变量
  13.     formPassword = GUI.PasswordField ( Rect (90, 30, 100, 20), formPassword ,"*"[0], 25);
  14.     //同理,这里是给formPassword 赋值
  15.     if ( GUI.Button ( Rect (10, 60, 100, 20) , "登录" ) )
  16.     { //如果单击登录按钮会执行Login()函数
  17.     Login();
  18.     }
  19.     GUI.TextArea( textrect, formText );//显示文本信息
  20. }

  21. function Login()
  22. {
  23.     var form = new WWWForm();//建立新表单变量
  24.         print(hash);//print的内容会在console选项卡中输出
  25.         print(formName);//我在这里添加三个输出语句是为了检验用户名和密码是否复制正确,以便之后调试php文件
  26.         print(formPassword);   
  27.    
  28.     form.AddField("hash",hash);//创建表单各项
  29.     form.AddField("name",formName);
  30.     form.AddField("password",formPassword);
  31.     var w = WWW(URL,form);//建立名为“w”的变量,并且将表单提交的URL和表单内容同步
  32.     yield w;//我们等待表单响应php程序的返回,让程序把控制权交给其他应用
  33.     if(w.error != null)//如果返回信息为错误信息,在console中输出错误信息
  34.     {
  35.         print(w.error);   
  36.     }
  37.     else
  38.     {
  39.         print("OK!");//在console中输出ok
  40.         formText = w.text;//将返回的web短信息赋值给formText ,在 执行GUI.TextArea( textrect, formText );时输出
  41.     }
  42.     formName = "";//点击查询完用户信息后清空用户名及密码
  43.     formPassword = "";
  44. }
复制代码
登录测试结果:
描述:测试结果
图片:QQ截图20120811094446.png



另外,你还可以插入其他信息依然可以查询


PS:因为我是刚接触unity中javascript的封装函数,js文件中有些注释可能不准,欢迎批评指正~谢谢~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2024-11-24 01:29

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表