當前位置:首頁 » 城管服務 » unity伺服器

unity伺服器

發布時間: 2020-12-13 02:45:30

㈠ 如何用unity引擎然後用c#語言搭建自己的服務

短連接用 HTTP , 長連接用 socket.
HTTP 的話, 你得具備web form socket 的話, 你得具備 win form 方面的知識
後台語言版的話, http 可以用 JAVA, php,python, 比較常用權的是 java
socket 可以用 c++ ,java, GO ,比較常用的是 C++
當然, 具體得看個人選擇

㈡ unity實際項目中有用自帶network做伺服器的嗎

u3d自帶的network組件局限性還是太大了用socket就可以了吧,再簡單一點用tcpclient/tcplistener,數據發送的包使用序列化方式

㈢ 怎樣模擬Unity游戲環境並從伺服器直接下載asset到本地

Unity會下載Assetbundle本地中,它的工作原理是先通過(版本號和下載地址)先在本地去找看有沒有這個Assetbundle,如果有直接返回對象,如果沒有的話,在根據這個下載地址重新從伺服器或者本地下載。這里版本號起到了很重要的作用,舉個例子,同一下載地址版本號為1的時候已經下載到本地,此時將版本號的參數改成2 那麼它又會重新下載,如果還保持版本號為1那麼它會從本地讀取,因為本地已經有版本號為1的這個Assetbundle了。你不用擔心你的資源本地下載過多,也不用自己手動刪除他們,這一切的一切Unity會幫我們自動完成,它會自動刪除掉下載後最不常用的Assetbundle ,如果下次需要使用的話只要提供下載地址和版本後它會重新下載。
我們在聊聊Assetbundle 中的腳本,在移動平台下Assetbundle裡面放的腳本是不會被執行的,還記得我們打包前給兩個Prefab掛上了腳本嗎?在手機上將Assetbundle下載到本地後,載入進游戲中Prefab會自動在本地找它身上掛著的腳本,他是根據腳本的名來尋找,如果本地有這條腳本的話,Prefab會把這個腳本重新綁定在自身,並且會把打包前的參數傳遞進來。如果本地沒有,身上掛的條腳本永遠都不會被執行。
在Prefab打包前,我在編輯器上給腳本中的變數 name 賦了不同值,當Prefab重新載入游戲的時候,它身上腳本的參數也會重新輸出。

如果你的Assetbundle中的Prefab上引用的對象,那麼這樣做就會出錯了,你需要設定他們的依賴關系。或者運行時通過腳本動態的載入對象。

㈣ unity3d 怎麼請求java伺服器

只是負責驗證用戶名和抄密碼,驗證之後返回token,token是有有效時間的,在有效時間內,並沒有保持連接的必要,所以,這里的RequestResponse可以做成短連接(http請求響應模式),提升並發。如果超過了有效時間還沒有進入游戲,令牌失效,在登錄驗證時將被踢回重新獲取令牌。登錄伺服器和網關之間需要有一個固定的連接傳遞新生成的令牌。

㈤ unity photon 能取代傳統伺服器嗎

* 具體實現過程:
* 1、建立SocketServer,等待客戶端的連接
* 2、當有客戶端連接的時候,按照雙方的約定,這時要讀取一行數據
* 其中保存客戶端要發送的文件名和文件大小信息
* 3、根據文件名在本地創建文件,並建立好流通信
* 4、循環接收數據包,將數據包寫入文件
* 5、當接收數據的長度等於提前文件發過來的文件長度,即表示文件接收完畢,關閉文件
* 6、文件接收工作結束

public class ServerReceive {

public static void main(String[] args) {

/**與伺服器建立連接的通信句柄*/
ServerSocket ss = null;
Socket s = null;

/**定義用於在接收後在本地創建的文件對象和文件輸出流對象*/
File file = null;
FileOutputStream fos = null;

/**定義輸入流,使用socket的inputStream對數據包進行輸入*/
InputStream is = null;

/**定義byte數組來作為數據包的存儲數據包*/
byte[] buffer = new byte[4096 * 5];

/**用來接收文件發送請求的字元串*/
String comm = null;

/**建立socekt通信,等待伺服器進行連接*/
try {
ss = new ServerSocket(4004);
s = ss.accept();
} catch (IOException e) {
e.printStackTrace();
}

/**讀取一行客戶端發送過來的約定信息*/
try {
InputStreamReader isr = new InputStreamReader(s.getInputStream());
BufferedReader br = new BufferedReader(isr);
comm = br.readLine();
} catch (IOException e) {
System.out.println("伺服器與客戶端斷開連接");
}

/**開始解析客戶端發送過來的請求命令*/
int index = comm.indexOf("/#");

/**判斷協議是否為發送文件的協議*/
String xieyi = comm.substring(0, index);
if(!xieyi.equals("111")){
System.out.println("伺服器收到的協議碼不正確");
return;
}

/**解析出文件的名字和大小*/
comm = comm.substring(index + 2);
index = comm.indexOf("/#");
String filename = comm.substring(0, index).trim();
String filesize = comm.substring(index + 2).trim();

/**創建空文件,用來進行接收文件*/
file = new File(filename);
if(!file.exists()){
try {
file.createNewFile();
} catch (IOException e) {
System.out.println("伺服器端創建文件失敗");
}
}else{
/**在此也可以詢問是否覆蓋*/
System.out.println("本路徑已存在相同文件,進行覆蓋");
}

/**【以上就是客戶端代碼中寫到的伺服器的准備部分】*/

/**
* 伺服器接收文件的關鍵代碼*/
try {
/**將文件包裝到文件輸出流對象中*/
fos = new FileOutputStream(file);
long file_size = Long.parseLong(filesize);
is = s.getInputStream();
/**size為每次接收數據包的長度*/
int size = 0;
/**count用來記錄已接收到文件的長度*/
long count = 0;

/**使用while循環接收數據包*/
while(count < file_size){
/**從輸入流中讀取一個數據包*/
size = is.read(buffer);

/**將剛剛讀取的數據包寫到本地文件中去*/
fos.write(buffer, 0, size);
fos.flush();

/**將已接收到文件的長度+size*/
count += size;
System.out.println("伺服器端接收到數據包,大小為" + size);
}

} catch (FileNotFoundException e) {
System.out.println("伺服器寫文件失敗");
} catch (IOException e) {
System.out.println("伺服器:客戶端斷開連接");
}finally{
/**
* 將打開的文件關閉
* 如有需要,也可以在此關閉socket連接
* */
try {
if(fos != null)
fos.close();
} catch (IOException e) {
e.printStackTrace();
}//catch (IOException e)
}//finally

}//public static void main(String[] args)
}//public class ServerReceive

客戶端源碼:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;

/**
*
* 文件名:ClientSend.java
* 實現功能:作為客戶端向伺服器發送一個文件
*
* 具體實現過程:
* 1、建立與伺服器端的連接,IP:127.0.0.1, port:4004
* 2、將文件的名字和大小通過自定義的文件傳輸協議,發送到伺服器
* 3、循環讀取本地文件,將文件打包發送到數據輸出流中
* 4、關閉文件,結束傳輸
*
* */

public class ClientSend {

public static void main(String[] args) {

/**與伺服器建立連接的通信句柄*/
Socket s = null;

/**定義文件對象,即為要發送的文件
* 如果使用絕對路徑,不要忘記使用'/'和'\'的區別
* 具體區別,請讀者自行查詢
* */
File sendfile = new File("API.CHM");
/**定義文件輸入流,用來打開、讀取即將要發送的文件*/
FileInputStream fis = null;
/**定義byte數組來作為數據包的存儲數據包*/
byte[] buffer = new byte[4096 * 5];

/**定義輸出流,使用socket的outputStream對數據包進行輸出*/
OutputStream os = null;

/**檢查要發送的文件是否存在*/
if(!sendfile.exists()){
System.out.println("客戶端:要發送的文件不存在");
return;
}

/**與伺服器建立連接*/
try {
s = new Socket("127.0.0.1", 4004);
}catch (IOException e) {
System.out.println("未連接到伺服器");
}

/**用文件對象初始化fis對象
* 以便於可以提取出文件的大小
* */
try {
fis = new FileInputStream(sendfile);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}

/**首先先向伺服器發送關於文件的信息,以便於伺服器進行接收的相關准備工作
* 具體的准備工作,請查看伺服器代碼。
*
* 發送的內容包括:發送文件協議碼(此處為111)/#文件名(帶後綴名)/#文件大小
* */
try {
PrintStream ps = new PrintStream(s.getOutputStream());
ps.println("111/#" + sendfile.getName() + "/#" + fis.available());
ps.flush();
} catch (IOException e) {
System.out.println("伺服器連接中斷");
}

/**
* 此處睡眠2s,等待伺服器把相關的工作準備好
* 也是為了保證網路的延遲
* 讀者可自行選擇添加此代碼
* */
try {
Thread.sleep(2000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}

/**之前的准備工作結束之後
* 下面就是文件傳輸的關鍵代碼
* */
try {

/**獲取socket的OutputStream,以便向其中寫入數據包*/
os = s.getOutputStream();

/** size 用來記錄每次讀取文件的大小*/
int size = 0;

/**使用while循環讀取文件,直到文件讀取結束*/
while((size = fis.read(buffer)) != -1){
System.out.println("客戶端發送數據包,大小為" + size);
/**向輸出流中寫入剛剛讀到的數據包*/
os.write(buffer, 0, size);
/**刷新一下*/
os.flush();
}
} catch (FileNotFoundException e) {
System.out.println("客戶端讀取文件出錯");
} catch (IOException e) {
System.out.println("客戶端輸出文件出錯");
}finally{

/**
* 將打開的文件關閉
* 如有需要,也可以在此關閉socket連接
* */
try {
if(fis != null)
fis.close();
} catch (IOException e) {
System.out.println("客戶端文件關閉出錯");
}//catch (IOException e)
}//finally

}//public static void main(String[] args)
}//public class ClientSend

㈥ Unity資源伺服器

。。。。。。。。。。。。。。。。。。。。。。。。

㈦ unity有什麼免費伺服器

好用嗎,看看先,謝謝分享哈

㈧ unity對伺服器有什麼要求么

伺服器的功能主要是用來給客戶端聯機,提供積分、登錄認證等服務。
所以對伺服器的要求主要是根據你具體做的項目來定的,只要你不是大型項目,一般的都可以達到要求。

㈨ 怎樣用unity unet做伺服器

Networking是一種軟體研發在跨平台路上更近一步的體現,真正做到了:anytime,anywhere,one code for all platform!
Networking出現之前,Unity仍然是一個客戶端游戲開發引擎。Networking出現之後,Unity甚至成為了跨客戶端服務端的游戲開發引擎。
同樣的組件在Unreal中早有產生,但追溯到最早的話,那可能就是國外各大游戲公司的私有引擎了。但Unity的威力在於其廣泛的普及程度,所以它是首次將該組件推廣至光羅大眾的商業引擎。
Networking本質上是對傳統C-S架構軟體下的網路層的高度抽象。
伺服器邏輯和客戶端邏輯在一個類裡面編寫(這里會帶來一些代碼整潔度上的麻煩~~)
伺服器和客戶端要做數據同步,不用發包了,在屬性前面加上[SyncVar]標簽就自動同步了。
客戶端調用伺服器,不用發包了,函數調用即可。
伺服器調用客戶端,不用發包了,函數調用即可。
帶來的好處太多都不用說了。
帶來的壞處,安全性上堪憂,設想一下,如果客戶端和伺服器邏輯都在一起,一旦客戶端被反編譯了,那麼是不是伺服器邏輯都泄漏了。
帶來的壞處2,伺服器程序員可能不需要寫游戲邏輯了。。

㈩ unity3d 網游伺服器端如何選擇

  • 如果對樓主有幫助,給個採納好不,謝謝啦

  • Photon和KBEngineunity3d是最適用Unity3d游戲開發的兩個伺服器引擎,但它們還是有區別的,只有清楚地了解區別在哪才能正確使用,下面簡單描述下兩者的共同點和不同點。

  • 語言

  • 對於大部分的程序員語言簡直就是宗教信仰。

  • Photon使用C#開發,當然使用者也是用C#進行各類游戲功能開發。前後端同種語言,這對使用Unity3d游戲開發也有很大的好處。

  • KBEngine使用C++開發,邏輯開發是用python,也是很不錯很快速的。

  • 開源與收費情況

  • Photon是Exit Games公司的產品,不開源,有好多種收費模式,官網上可以看到。開發階段可以用免費的license,後期可以看流量用戶活躍度來選擇付費模式。後續的支持,似乎是免費的,你可以選擇郵件或是到論壇發帖求助,當然是E文。

  • KBEngine是國人開發,開源免費,但從官網上並沒有看到商業使用的案例。有中文論壇,你可以在論壇上向開發者求助。

  • 雖然兩者的模式不同,但作為一個Unity3d游戲開發者,我們最希望的其實是把游戲引擎當作一個安全穩定的黑箱。

  • 操作系統

  • 之前說了Photon使用C#開發很自然的,配套的工具也是使用C#,比如最重要的PhotonControl。所以開發環境和生產環境最好都是windows。

  • 雖然在跨平台上有mono,在伺服器代碼部分是系統無關的,但是不管你信不信,我是不信它的一套窗體工具也能運行在Linux下。反正,官網說法是,開發和生產環境都是用windows。

  • KBEngine建議開發環境選擇Windows,生產環境選擇linux。畢竟你總不希望開一組伺服器打開9個Console窗體,一不小心把哪個點X了吧~

  • 協議

  • Photon有自己的序列化反序列化方式,你也可以使用protobuf這類的來做應用層傳輸協議。

  • KBEngine在這方面表示不支持自定義協議,它幫你選擇了有效的方法來處理,如果你習慣了他規定的方式,會喜歡上的。

  • 看法

  • 在功能上,我毫無疑問地更喜歡KBEngine,腳本化和自動持久化是極富魅力的功能。而Photon幾乎沒做這方面的功能,可能和老外的觀念有關系。就目前我對兩者功能的理解看來,Photon其實是個和SuperSocket差不多的東西,而SS是作為輕量級伺服器框架存在的,Photon卻是說自己是Unity3d游戲引擎,除去提供的MMO示例代碼(未解讀),沒看到什麼游戲引擎的魅力。

熱點內容
影視轉載限制分鍾 發布:2024-08-19 09:13:14 瀏覽:319
韓國電影傷口上紋身找心裡輔導 發布:2024-08-19 09:07:27 瀏覽:156
韓國電影集合3小時 發布:2024-08-19 08:36:11 瀏覽:783
有母乳場景的電影 發布:2024-08-19 08:32:55 瀏覽:451
我准備再看一場電影英語 發布:2024-08-19 08:14:08 瀏覽:996
奧迪a8電影叫什麼三個女救人 發布:2024-08-19 07:56:14 瀏覽:513
邱淑芬風月片全部 發布:2024-08-19 07:53:22 瀏覽:341
善良媽媽的朋友李采潭 發布:2024-08-19 07:33:09 瀏覽:760
哪裡還可以看查理九世 發布:2024-08-19 07:29:07 瀏覽:143
看電影需要多少幀數 發布:2024-08-19 07:23:14 瀏覽:121