Unity 3 dは、OracleデータベースをWebリンクしてWebと通信します.


  • Oracleデータベースをデータストレージとして使用し、接続文字列をプロファイルに書き込みます.
  • <?xml version="1.0"?>
    <!--
             ASP.NET          ,   
      http://go.microsoft.com/fwlink/?LinkId=169433
      -->
    <configuration>
    	<connectionStrings>
    		<add name="connstr" connectionString="Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)) (CONNECT_DATA=(SERVICE_NAME=orcl)));User ID=userid;Password=pwd"/>
    	</connectionStrings>
    	<system.web>
    		<compilation debug="true" targetFramework="4.0">
    			<assemblies>
    				<add assembly="Oracle.DataAccess, Version=1.102.3.0, Culture=neutral, PublicKeyToken=89B483F429C47342"/></assemblies></compilation>
    	</system.web>
    </configuration>
    
  • は*を呼び出している.unity 3 dのHTMLページには、
    <script type="text/javascript" language="javascript">
    		<!--
                //initializing the WebPlayer
                var u = new UnityObject2();
                u.initPlugin(jQuery("#unityPlayer")[0], "Release.unity3d");
    
                //  Unity    SQL  
                function ProcessSQL(arg) {
                    
                    $.post("HandleSQL.ashx", //        
                        {sql: arg }, // SQL           
                        function (msg) {//            ,msg         
                        	//alert(msg);
                            u.getUnity().SendMessage("Manager", "PushURL", msg); //  Unity  PushURL  ,  msg  Unity    
                        }
                    );
                }
    		-->
    		</script>
  • というコードが追加されています.
  • Unityシーンでは、バックグラウンド処理コードHandleSQLを呼び出すページ上のProcessSQLメソッドが呼び出される.ashxは、シーンから伝わるsql文を処理します.
    <%@ WebHandler Language="C#" Class="HandleSQL" %>
    
    using System;
    using System.Web;
    using System.Configuration;
    using Oracle.DataAccess.Client;
    
    public class HandleSQL : IHttpHandler {
        
        public void ProcessRequest (HttpContext context) {
            context.Response.ContentType = "text/plain";
            GetPath(context.Request["sql"]);//            --SQL  
        }
     
        public bool IsReusable {
            get {
                return false;
            }
        }
    
        public void GetPath(string sql) {
            string connstr = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;
            OracleConnection conn = new OracleConnection(connstr);
            try
            {
                conn.Open();
                OracleCommand cmd = new OracleCommand(sql, conn);
                OracleDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    HttpContext.Current.Response.Write(dr[0]);
                }
            }
            catch (Exception ee) {
                HttpContext.Current.Response.Write(ee);
            }
            conn.Close();
        }    
    }
  • バックグラウンドコード処理が完了すると、htmlページで実行に成功した処理関数を呼び出し、返された結果をUnityシーンのManagerオブジェクトに付随するPushURLメソッドに渡す.