Ⅰ 如何在Unity3d中實現和網頁數據的交互
1、unity向網頁發送數據的函數:Application.ExternalCall("SayHello",gameObject.name),這個函數將調用網頁中的SayHello函數,gameObject.name為傳遞的參數。
2、網頁向unity發送數據的函數:網頁中用GetUnity().SendMessage(message, "AcceptName", buildingname)函數來調用unity中的函數,此函數的參數message為unity中的物體,AcceptName為物體上的函數,buildingname為傳遞的參數。
網頁中的函數如下:
1 function SayHello(message){//此函數來接收unity中發送出來的message值,並將處理後的數據再發送回unity中
2 jQuery.post('../Unity/javascript/DBhelper.ashx', {id:message}, function(data)
3 {
4 var msg=JSON.parse(data);//將json數據解析
5 var buildingname = msg[0].Building_name;
6 var buildingcategory=msg[0].Building_category;
7 var buildingpic = msg[0].Building_pic;
8 GetUnity().SendMessage(message, "AcceptName", buildingname);//向unity中的message物體上的MyFunction函數發送buildingname值
9 GetUnity().SendMessage(message, "AcceptCategory", buildingcategory);
10
11 GetUnity().SendMessage(message, "AcceptImg", buildingpic);
12 });
13 }
此函數將unity中發送的數據message傳到DBhelper.ashx中,在DBhelper.ashx中將傳遞過來的數據進行查詢等操作,然後再用GetUnity().SendMessage(message, "AcceptName", buildingname)將處理好的數據buildingname傳給unity中的AcceptName函數。
以下是unity中的腳本,可以實現中文,關於中文的實現由於文章有限,在此不再說明,只說明怎樣接收網頁中的數據。
1 var chineseSkin : GUISkin;//在此可以選擇字體,並設置為中文。建議編輯器設為uft-8。
2
3 var buildingname:String;//用來接收從網頁中傳遞過來的buildingname值
4 var buildingcategory:String;//用來接收從網頁中傳遞過來的buildingcategory值
5
6 var buildingpic:Texture2D;//用來接收從網頁中傳遞過來的buildingpic值
7 var windowRect0 = Rect (20, 20, 250, 200);
8 var enable:boolean;
9 function Awake(){
10 enable = false ;
11 }
12 function OnMouseDown () {
13 Application.ExternalCall("SayHello",gameObject.name);// 向網頁中的SayHello函數發送gameObject.name數據
14 enable = true;
15 }
16 function AcceptName(bdname){//用於接收網頁中發送回來的數據
17 buildingname=bdname;
18 }
19 function AcceptCategory(buildingType){//用於接收網頁中發送回來的數據
20 buildingcategory=buildingType;
21 }
22
23 function AcceptImg(img){
24 var www :WWW = new WWW("http://localhost:1166/Unity/images/"+img+"");
25 yield www;
26 buildingpic=www.texture;
27 }
28 function OnGUI(){
29 GUI.skin=chineseSkin;
30 if(enable)
31 {
32 windowRect0 = GUI.Window (0, windowRect0, DoMyWindow, "屬性");
33 }
34 }
35 function DoMyWindow (windowID : int) {
36 GUI.Label(Rect(10,50,80,30),"建築物名字");
37 GUI.TextField(Rect(100,50,100,30),buildingname);
38 GUI.Label(Rect(10,100,80,30),"建築物類型");
39 GUI.TextField(Rect(100,100,100,30),buildingcategory);
40
41 GUI.DrawTexture(Rect(10,150,200,50),buildingpic,ScaleMode.ScaleToFit,true,0);
42 if(GUI.Button(Rect(190,20,50,30),"退出")){
43 enable = false;
44 }
45 GUI.DragWindow (Rect (0,0,10000,10000));
46 }
47 function OnMouseOver(){
48 transform.Rotate(0,Time.deltaTime*100,0,Space.World);
49 }
50 function OnMouseEnter(){
51 renderer.material.color = Color.blue;
52 }
53 function OnMouseExit(){
54 renderer.material.color = Color.yellow;
55 }
這是unity中的腳本,此腳本實現點擊物體,彈出物體的屬性。
Ⅱ 在unity VRTK中創建的交互單獨可實現,放入整個場景中卻實現不了,可能是什麼問題
一個是腳本沖突(比如 一個腳本改了,另一個腳本改回來)
一個是場景有錯誤 導致腳本未編譯(通常能在console中看到紅色錯誤提示)
有可能是場景導入後,過多的東西導致細節出現紕漏(腳本忘記掛載啊,腳本運行順序不對啊,碰撞器忘記加 或者被其他玩意兒給干擾啦 這類)
Ⅲ Unity3D怎樣讀取Access資料庫
Unity3D怎樣讀取Access資料庫?
在U3D中要訪問Access資料庫,我們需要用到兩個dll,System.Data.dll和System.EnterpriseServices.dll,缺一不可。我們找到這兩個dll放到u3d的Plugins文件夾下面。
下面我們創建一個Access資料庫版本是07樣式是*.accdb(03版本的Access資料庫的樣式為*.mdb)在我們進行code的時候,要根據不同的版本進行判斷啦,對於不同的Access資料庫版本,我們要對應不懂的文件後綴名。要不然會提示你資料庫文件是未知文件。
下面是讀取Access的一個demo,其他的修改,添加數據都是在修改他的sql語句啦。簡單的代碼如下:
using UnityEngine;
using System.Collections;
//引入命名空間
using System;
using System.Data;
using System.Data.Odbc;
public class RaderData : MonoBehaviour
{
/// <summary>
/// 聲明一個接受讀取數據欄位值的變數
/// </summary>
string text = string.Empty;
public void Start()
{
//讀取數據文件。
ReadStudent(Application.dataPath + 「/Wild boar.accdb」);
}
/// <summary>
/// 讀取表數值的函數
/// </summary>
/// <param name=」filetoread」>數據文件的路徑</param>
internal void ReadStudent(string filetoread)
{
//聲明連接資料庫的欄位
string connection = 「Driver={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ=」 + filetoread;
//從表中查詢所有數據
string sqlQuery = 「select * from Student」;
//打開資料庫
OdbcConnection con = new OdbcConnection(connection);
//對資料庫進行操作
OdbcCommand cmd = new OdbcCommand(sqlQuery,con);
//根據表名,讀取數據到一個臨時表
DataTable dt = new DataTable(「Student」);
//try catch finally進行了異常處理,這個是好習慣,嘿嘿
try
{
//打開資料庫
con.Open();
//讀取數據
OdbcDataReader reader = cmd.ExecuteReader();
//把數據載入到臨時表
dt.Load(reader);
//在使用完畢之後,一定要關閉,要不然會出問題
reader.Close();
//關閉資料庫
con.Close();
}
catch (Exception ex)
{
Debug.Log(ex.ToString());
}
finally
{
//判斷資料庫是否打開,如果打開就關閉。
if (con.State!=ConnectionState.Closed)
{
con.Close();
}
//釋放資料庫資源
con.Dispose();
}
if (dt.Rows.Count>0)
{
//讀取數據
for (int i = 0; i < dt.Rows.Count; i++)
{
text = dt.Columns[0].ColumnName + 」 : 」 + dt.Rows[dt.Columns[0].ColumnName].ToString() + 「 | 」 + dt.Columns[1].ColumnName + 」 : 」 + dt.Rows[dt.Columns[1].ColumnName].ToString() + 「 | 」 + dt.Columns[2].ColumnName + 」 : 」 + dt.Rows[dt.Columns[2].ColumnName].ToString() + 「 | 」 + dt.Columns[3].ColumnName + 」 : 」 + dt.Rows[dt.Columns[3].ColumnName].ToString();
Debug.Log(dt.Columns[0].ColumnName + 」 : 」 + dt.Rows[dt.Columns[0].ColumnName].ToString() + 「 | 」 + dt.Columns[1].ColumnName + 」 : 」 + dt.Rows[dt.Columns[1].ColumnName].ToString() + 「 | 」 + dt.Columns[2].ColumnName + 」 : 」 + dt.Rows[dt.Columns[2].ColumnName].ToString() + 「 | 」 + dt.Columns[3].ColumnName + 」 : 」 + dt.Rows[dt.Columns[3].ColumnName].ToString());
}
}
}
public void OnGUI()
{
GUI.Label(new Rect(10,10,500,200),text);
}
}
Ⅳ Unity3D與Sqlite資料庫是怎麼直連 成的求大夥為我解答啊
現在我們來研究一下Unity3D如何與Sqlite資料庫進行直連的問題
1、環境介紹:
Windows7,Unity3D,SQLite Expert Personal 3
2、開發語言:
JavaScript
3、需要的dll文件:
Mono.Data.Sqlite.dll和sqlite3.dll,稍後我會將所有文件打包在一起供大家討論下,先看下這些dll文件應該被放在哪裡,
要改動的地方我已經用紅色標記出來了,注意這個要改成.NET2.0,這樣才能夠發布的。系統默認的不是.NET2.0,大家這一點要注意!!!Modified 2011 by Alan Chatham */
//#pragma strict
/*代碼描述
*本代碼是為了在Windows環境下運行unity3d和Sqlite資料庫而寫的;實現的基本功能是unity3d能夠與資料庫之間進行基本的通信,比如說
在資料庫中的數據被改變了以後,unity3d中得到的數據也會在刷新了之後跟著改變;這只是一個基本的核心的技術,為的是能夠應用在大型的unity3d
項目中,能夠存儲場景中的項目的屬性,在需要改變對象的屬性或增加、減少等對象時能夠很方便的用得上。
要實現本代碼。首先需要一些dll文件,一個是Mono.Data.SQLiteClient.dll,另外一個是sqlite3.dll,這些文件都能夠在unity3d的安裝目錄中找得到。
除此之外,還需要把這兩個文件放在你的項目的這個路徑下面:AssetsPlugins,沒有Plugins文件夾就必須創建這個文件夾,然後將這兩個dll文件放在該文件夾寫。
當然,如果你想能夠在PC上面發布成可執行文件,還需要改動一些地方。在unity3d中的Play Setting ->Other Setting 中將Api Compatibility的等級改為
.NET 2.0;那麼這些操作做完了以後,如果你的代碼寫得沒有問題,那麼你就可以成功了。
好了,下面咱們來詳細解釋下代碼吧。
*
*/
import System.Data;// we import ourdata class 我們先導入我們的數據集
import Mono.Data.Sqlite; // we import sqlite 我們導入sqlite數據集,也就是Plugins文件夾下的那個dll文件
class dbAccess {
// variables for basic query access
private var connection : String; //資料庫的連接字元串,用於建立與特定數據源的連接
private var dbcon : IDbConnection; //IDbConnection的連接對象,其實就是一個類對象
private var dbcmd : IDbCommand; //IDbCommand類對象,用來實現操作資料庫的命令:註解:我在網上資料看到的如何實現對資料庫執行命令:
//首先創建一個IDbConnection連接對象,然後將一條資料庫命令賦值給一個字元串,利用這個字元串和連接對象
//就可以創建(new)一個IDbCommand對象了,然後使用提供的方法就可以執行這個命令了。
private var reader : IDataReader; //reader的作用就是讀取結果集的一個或多個只進結果流
function OpenDB(p : String){
connection = "URI=file:" + p; // we set the connection to our database
dbcon = new SqliteConnection(connection);
dbcon.Open(); //打開資料庫連接操作
}
function BasicQuery(q : String, r : boolean){ // run a c Sqlite query
dbcmd = dbcon.CreateCommand(); // create empty command
dbcmd.CommandText = q; // fill the command
reader = dbcmd.ExecuteReader(); // execute command which returns a reader返回IDataReader的對象,創建IDataReader的對象
if(r){ // if we want to return the reader
return reader; // return the reader 返回讀取的對象,就是讀到了什麼東西
}
}
// This returns a 2 dimensional ArrayList with all the
//data from the table requested
function ReadFullTable(tableName : String){
var query : String;
query = "SELECT * FROM " + tableName;
dbcmd = dbcon.CreateCommand();
dbcmd.CommandText = query;
reader = dbcmd.ExecuteReader();
var readArray = new ArrayList();
while(reader.Read()){
var lineArray = new ArrayList();
for (var i = 0; i < reader.FieldCount; i++)
lineArray.Add(reader.GetValue(i)); // This reads the entries in a row
readArray.Add(lineArray); // This makes an array of all the rows
}
return readArray; // return matches
}
// This function deletes all the data in the given table.Forever.WATCH OUT! Use sparingly, if at all
function DeleteTableContents(tableName : String){
var query : String;
query = "DELETE FROM " + tableName;
dbcmd = dbcon.CreateCommand();
dbcmd.CommandText = query;
reader = dbcmd.ExecuteReader();
}
function CreateTable(name : String, col : Array, colType : Array){ // Create a table, name, column array, column type array
var query : String;
query= "CREATE TABLE " + name + "(" + col[0] + " " + colType[0];
for(var i=1; i<col.length; i++){
query += ", " + col + " " + colType;
}
query += ")";
dbcmd = dbcon.CreateCommand(); // create empty command
dbcmd.CommandText = query; // fill the command
reader = dbcmd.ExecuteReader(); // execute command which returns a reader
}
function InsertIntoSingle(tableName : String, colName : String, value : String){ // single insert
var query : String;
query = "INSERT INTO " + tableName + "(" + colName + ") " + "VALUES (" + value + ")";
dbcmd = dbcon.CreateCommand(); // create empty command
dbcmd.CommandText = query; // fill the command
reader = dbcmd.ExecuteReader(); // execute command which returns a reader
}
function InsertIntoSpecific(tableName : String, col : Array, values : Array){ // Specific insert with col and values
var query : String;
query = "INSERT INTO " + tableName + "(" + col[0];
for(var i=1; i<col.length; i++){
query += ", " + col;
}
query += ") VALUES (" + values[0];
for(i=1; i<values.length; i++){
query += ", " + values;
}
query += ")";
dbcmd = dbcon.CreateCommand();
dbcmd.CommandText = query;
reader = dbcmd.ExecuteReader();
}
function InsertInto(tableName : String, values : Array){ // basic Insert with just values
var query : String;
query = "INSERT INTO " + tableName + " VALUES (" + values[0];
for(var i=1; i<values.length; i++){
query += ", " + values;
}
query += ")";
dbcmd = dbcon.CreateCommand();
dbcmd.CommandText = query;
reader = dbcmd.ExecuteReader();
}
// This function reads a single column
//wCol is the WHERE column, wPar is the operator you want to use to compare with,
//and wValue is the value you want to compare against.
//Ex. - SingleSelectWhere("puppies", "breed", "earType", "=", "floppy")
//returns an array of matches from the command: SELECT breed FROM puppies WHERE earType = floppy;
function SingleSelectWhere(tableName : String, itemToSelect : String, wCol : String, wPar : String, wValue : String){ // Selects a single Item
var query : String;
query = "SELECT " + itemToSelect + " FROM " + tableName + " WHERE " + wCol + wPar + wValue;
dbcmd = dbcon.CreateCommand();
dbcmd.CommandText = query;
reader = dbcmd.ExecuteReader();
var readArray = new Array();
while(reader.Read()){
readArray.Push(reader.GetString(0)); // Fill array with all matches
}
return readArray; // return matches
}
function CloseDB(){
reader.Close(); // clean everything up
reader = null;
dbcmd.Dispose();
dbcmd = null;
dbcon.Close();
dbcon = null;
}
}
復制代碼
如果你還有什麼不懂的,可以網路搜下:編程回憶錄,他們現在正在錄制這方面的教程,都是零基礎開始,由淺入深。
Ⅳ 求問關於unity3d操作資料庫的問題
你好,前段時間做項目沒聯網,才看到。
這個問題我已經解決了,不過我是用C#解決的,我不會javascript,如果你需要你把郵箱給我我可以發給你
Ⅵ unity 3d怎麼與資料庫進行交互
Unity3d連接SQL
Server資料庫:
首先需要把Unity安裝路徑下的System.Data.dll和Mono.Data.SqliteClient.dll拷貝到當前unity工程的Assets文件夾下,因為之後在腳本中引用的.dll並不是framework提供的。腳本的內容:
using
UnityEngine;
using
Sys...
Ⅶ 求教大神,unity小游戲怎麼簡單和資料庫連接
原理上基本是一種
都是把2D圖像映射到一個平面網格上,然後讓這個網格始終面向攝像機,同時攝像機的投影模式為平行投影(沒有近大遠小)
實際實現上有挺多的,比如可以在3D模式下自己實現上述原理,還可以使用assetstore的一些2D游戲製作插件,還可以使用unity3d自帶的2D模式製作。
Ⅷ 創建資料庫的兩種方法
創建資料庫有兩種方式:
1.用圖形界面創建資料庫
資料庫(Database)是按照數據結構來組織、存儲和管理數據的建立在計算機存儲設備上的倉庫。
簡單來說是本身可視為電子化的文件櫃——存儲電子文件的處所,用戶可以對文件中的數據進行新增、截取、更新、刪除等操作。
拓展資料:
資料庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫,它產生於距今六十多年前,隨著信息技術和市場的發展,特別是二十世紀九十年代以後,數據管理不再僅僅是存儲和管理數據,而轉變成用戶所需要的各種數據管理的方式。資料庫有很多種類型,從最簡單的存儲有各種數據的表格到能夠進行海量數據存儲的大型資料庫系統都在各個方面得到了廣泛的應用。
在信息化社會,充分有效地管理和利用各類信息資源,是進行科學研究和決策管理的前提條件。資料庫技術是管理信息系統、辦公自動化系統、決策支持系統等各類信息系統的核心部分,是進行科學研究和決策管理的重要技術手段。
Ⅸ unity3d 連接資料庫 希望通過webservice 訪問oracle 求大神給出詳細步驟怎麼建webservice
寫一個DLL導入進去呢,SQL操作在DLL中完成就可以了。我在Unity中只需要調用。
於是,我便寫了一個類:
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace SayHello
{
public class sayHello
{
public DataSet say(){
string Conn = "server=127.0.0.1;database=testsql;uid=sa;pwd=sa";
SqlConnection conn = new SqlConnection(Conn);
string sSql = "select * from say";
SqlDataAdapter da = new SqlDataAdapter(sSql, conn);
DataSet ds = new DataSet();
da.Fill(ds);
conn.Close();
return ds.Tables[0].Rows[0][0].ToString();
}
}
}
然後我用這個類生成了一個DLL,SayHello.dll,再Unity3D中這樣導入.
首先將SayHello.dll復制到Assets文件夾下,然後在Unity3D使用using導入,就像是這樣:
using SayHello;
然後在Start中這樣寫:
void Start () {
sayHello my = new sayHello();
print(my.testsql());
}