|  | 
 
| 作者:夜雨 首先介绍一下自己,我是做php网站开发的,会javascript,但是没有接触过unity3d,8月9号我们团队队长让我看看关于unity3D基本使用和连接数据的资料然后,我经过调试在本地服务器运行成功。所以,以下内容应该会很速成,希望对u3d使用者有帮助。
 
 step1.在phpmyadmin里建立名为“unity3dtest”的数据库
 step2.建数据表
 step3.插入数据复制代码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
step4.php控制程序。以下程序可以放在你本地服务器的根目录下,我在我的电脑上为了更合理建立了一个专门的文件夹放置该文件。复制代码INSERT INTO  `unity3dTest`.`scores` (
`id` ,
`name` ,
`password` ,
`info`
)
VALUES (
NULL ,  'admin',  'admin', 'It is my first unity3d game!'
);
在本地服务器下创建“Unity3dApp”文件夹,并创建“check.php”文件,将下面的代码复制到php文件中
 step5.创建javascript文件,并命名为“phpUnity”,将其拖到hierarchy中主摄像头的对象上复制代码<?
// 连接数据库
$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();
?>
登录测试结果:复制代码#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文件中有些注释可能不准,欢迎批评指正~谢谢~
 
 | 
 |